1
year <- c(2000:2014)
group <- c("A","A","A","A","A","A","A","A","A","A","A","A","A","A","A",
         "B","B","B","B","B","B","B","B","B","B","B","B","B","B","B",
         "C","C","C","C","C","C","C","C","C","C","C","C","C","C","C")
value <- sample(1:5, 45, replace=TRUE)

df <- data.frame(year,group,value)
df$value[df$value==1] <- NA

   year group value
1  2000     A    NA
2  2001     A     2
3  2002     A     2
...
11 2010     A     2
12 2011     A     3
13 2012     A     5
14 2013     A    NA
15 2014     A     3
16 2000     B     2
17 2001     B     3
...
26 2010     B    NA
27 2011     B     5
28 2012     B     4
29 2013     B     3
30 2014     B     5
31 2000     C     5
32 2001     C     4
33 2002     C     3
34 2003     C     4
...
44 2013     C     5
45 2014     C     3

上記は私の質問のサンプルデータフレームです。各グループ (A、B、または C) には、2000 年から 2014 年までの値がありますが、年によっては、一部のグループで値が欠落している可能性があります。

プロットしたいグラフは次のとおりです。

x 軸は年です

y 軸はグループです (つまり、A、B、C は y-lab に表示する必要があります)。

棒または線は、各グループの値の可用性を表します

値が NA の場合、バーはその時点では表示されません。可能な場合は ggplot2 をお勧めします。

誰でも助けることができますか?ありがとうございました。

私の説明は紛らわしいと思います。以下のようなグラフを期待していますが、x 軸は年になります。棒または線は、特定のグループの値が年間を通じて利用可能かどうかを表します。

グループAのサンプルデータフレームには、

2012 A 5
2013 A NA
2014 A 3

そうすると、2013 年のグループ A の時点では何も表示されず、2014 年のグループ A の時点でドットが表示されます。

ここに画像の説明を入力

4

1 に答える 1

2

範囲なしで geom_errorbar を使用できます (水平の場合は geom_errorbarh)。次に、complete.cases(または!is.na(df$value))のサブセットのみ

library(ggplot2)

set.seed(10)

year <- c(2000:2014)
group <- c("A","A","A","A","A","A","A","A","A","A","A","A","A","A","A",
       "B","B","B","B","B","B","B","B","B","B","B","B","B","B","B",
       "C","C","C","C","C","C","C","C","C","C","C","C","C","C","C")
value <- sample(1:5, 45, replace=TRUE)

df <- data.frame(year,group,value)
df$value[df$value==1] <- NA

no_na_df <- df[complete.cases(df), ]

ggplot(no_na_df, aes(x=year, y = group)) + 
    geom_errorbarh(aes(xmax = year, xmin = year), size = 2)

ここに画像の説明を入力

編集: カウントバーを取得するには、この少し魅力のない方法を使用できます. バーに幅を持たせるために、グループ データの数値表現を作成する必要があります。その後、スケールで変数を再び離散として表すことができます。

df$group_n <- as.numeric(df$group)

no_na_df <- df[complete.cases(df), ]

ggplot(no_na_df, aes(xmin=year-0.5, xmax=year+0.5, y = group_n)) + 
    geom_rect(aes(ymin = group_n-0.1, ymax = group_n+0.1)) +
    scale_y_discrete(limits = levels(df$group))

ここに画像の説明を入力

于 2015-10-16T07:00:54.057 に答える