【问题标题】:How to plot the availability of a variable by year?如何按年份绘制变量的可用性?
【发布时间】:2015-10-16 04:26:41
【问题描述】:
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组点就会出现一个点。

【问题讨论】:

  • 请不要使用df &lt;- as.data.frame(cbind(year,group,value))。由于cbind,所有内容都被强制转换为character。请使用df &lt;- data.frame(year, group, value)
  • 我明白了,谢谢提醒
  • 试试ggplot(df)+ geom_bar(aes(x=year, y=value, fill=group), position='dodge', stat='identity')
  • 感谢 akrun,但这不是我想要的。值无关紧要。我想要的是显示每个组在哪一年有可用价值。
  • 抱歉,我不太明白

标签: r plot bar-chart availability


【解决方案1】:

您可以使用 geom_errorbar,没有范围(geom_errorbarh 表示水平)。然后只是完成.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))

【讨论】:

  • 谢谢。我认为我的描述令人困惑,因此我编辑了我的问题以进行澄清。
  • 一般的想法是对的,但是你想要的不是线条,而是带有中断的数据丢失的地方?否则我还是不明白。
  • 我会说总体思路是正确的。在您的图表中,可用数据点显示为线段。但是想象一下将它们表示为点,并将这些点连接到同一组中。
  • 这些行可能需要对所有连续年份进行分组而不会中断。这是可能的,但需要对数据进行一些准备。不过,制作一个伪条形图相当简单。查看我的编辑。
猜你喜欢
  • 2021-07-31
  • 2022-01-05
  • 1970-01-01
  • 2023-02-11
  • 1970-01-01
  • 1970-01-01
  • 2021-08-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多