0

非常に簡単に修正できるはずの問題がありますが、自分の状況に直接適用できる答えが見つかりません。

表示されるポイントが文字ベクトルからフィルター処理された値である geom_point を使用してプロットを作成しようとしています。y は連続数値、x は日付、fill は文字ベクトルです。

ここに私のサンプルデータがあります:

year    month   day attempt n_test
2019    6   22  1   NA
2019    7   13  2   n
2019    8   3   3   n
2019    8   20  4   n
2019    9   3   5   n
2019    9   4   6   n
2019    9   8   7   n
2019    9   11  8   p
2019    9   17  9   n
2019    10  3   10  n
2019    10  3   11  n
2019    10  11  12  c
2019    10  22  13  n
2019    10  25  14  n
2019    10  28  15  p
2019    11  6   16  c
2019    11  9   17  n
2019    11  25  18  n
2019    12  4   19  n
2019    12  8   20  n
2019    12  14  21  p
2019    12  17  22  n
2019    12  20  23  n

これは「ntest.csv」と呼ばれます。

これが私のコードです:

ntest <- read.csv('ntest.csv', header = TRUE)
n_date <- ymd(paste(ntest$year, ntest$month, ntest$day, sep="-"))
ggplot(ntest, aes(n_date, y=attempt)) +
    geom_point(aes(colour = n_test), size = 3.5) +
    labs(x=NULL) +
    theme(legend.position="none",
          axis.text.x = element_text(color = "black", size = 10, angle=45),
          axis.text.y = element_text(color = "black", size = 10),
          axis.title.y = element_text(size = 13, vjust = 2)) +
    scale_x_date(date_breaks = "months" , date_labels = "%b-%y")

これにより、添付のグラフが得られます。

ntestplot

n_test が "p" に等しい geom_point グラフの行のみを表示したいと考えています。青い点だけの同じグラフです。使ってみました

ntest %>% 
filter(n_test=="p")

ggplot の前ですが、これにより次の結果が得られます。

「エラー: 美学は長さ 1 であるか、データ (3) と同じでなければなりません: x」

どんな助けでも大歓迎です。

4

1 に答える 1

2

ここでの問題はn_date、データ フレームの一部を作成していないため、データ フレームをフィルタリングしてもフィルタリングされず、長さが異なることです。解決策は、データ フレームの列として作成するだけです。

ntest$n_date <- lubridate::ymd(paste(ntest$year, ntest$month, ntest$day, sep="-"))

これでフィルターを適用すると、プロットが機能します (カラー グループが 1 つしかないため、ポイントが赤になっていることに注意してください)。

ggplot(ntest %>% filter(n_test == "p"), aes(n_date, y=attempt)) +
    geom_point(aes(colour = n_test), size = 3.5) +
    labs(x=NULL) +
    theme(legend.position="none",
          axis.text.x = element_text(color = "black", size = 10, angle=45),
          axis.text.y = element_text(color = "black", size = 10),
          axis.title.y = element_text(size = 13, vjust = 2)) +
    scale_x_date(date_breaks = "months" , date_labels = "%b-%y")

ここに画像の説明を入力

于 2020-09-14T13:47:44.837 に答える