r语言 - 绘制二进制序列的多个面板



我有以下形式的二进制事件数据,在一个数据帧中:

year   A   B   C   D
1990   0   0   1   0
1991   0   1   1   0
1992   0   0   0   1
1993   1   1   0   0

总共可能有大约50个系列,大约25年。

我的目标是在一个图中显示所有系列,以可视化该系列的聚合视图。

。我想在一个图中绘制所有的数据,这样每一列就会有一个单独的面板在彼此的顶部。每个面板可以是一个简单的直方图(即type="h"),以可视化二进制数据。

除了最下面的面板外,面板之间自然不应该有x轴标签和刻度等。

现在,我可以对par(mfrow=c(rows, cols))手动执行此操作,然后对每个序列分别执行plot(...),但由于要绘制的序列数量众多,这是不可行的。或者我可以写一个for循环来处理它,但是一定有更好的方法来实现它。

如果不逐个面板手动操作,我怎么能做到这一点?如果有更好的方法将所有系列的综合视图可视化到一个图中,欢迎提出建议。例如,如果有一种方法可以做到这一点,而不需要单独的面板。

后续问题

关于Ben回答中ggplot2溶液的格式化:

1)目前,列标题(不知道确切的名称,但"系列标题")以90°角位于右侧,因此它们相互重叠,因为名称是国家名称。我希望它们以0°角位于每个面板的左侧。

2)此外,目前每个面板在每个面板的LH侧都有自己的y轴刻度标签0和1,这些都是不必要的,所以我想删除它们。

最简单的方法是将数据重塑为长格式(例如下面的reshape2::melt()),然后使用latticeggplot2

dd <- read.table(header=TRUE,text="
year   A   B   C   D
1990   0   0   1   0
1991   0   1   1   0
1992   0   0   0   1
1993   1   1   0   0")
## make category names longer
names(dd) <- c("year","Aardvark","Behemoth","Cataclysm","Disaster")
library("reshape2")
ddm <- melt(dd,id.var="year")

晶格

library("lattice")
## you could use type="h" here, but I like "b" better ...
xyplot(value~year|variable,data=ddm,type="b",
       layout=c(1,4), ## stack (1 column, 4 rows); can also
                      ## use a third element of layout to split
                      ## into multiple pages
       as.table=TRUE  ## stack top-to-bottom
      ) 

ggplot2

updated:删除y轴刻度标签;使用这个答案来旋转facet标签。

library("ggplot2"); theme_set(theme_bw())
ggplot(ddm,aes(year,value))+geom_point()+geom_line()+
    facet_grid(variable~.)+  ## or use facet_wrap(~variable)
    theme(panel.margin=grid::unit(0,"lines"))+  ## squash panels together
       scale_y_continuous(breaks=c(0,1),labels=rep("",2))+
    theme(strip.text.y = element_text(angle = 0))

相关内容

  • 没有找到相关文章

最新更新