【问题标题】:R: grouped bar plot every x rowsR:每x行分组条形图
【发布时间】:2017-03-11 23:36:51
【问题描述】:

我有一个这样的数据框:

S_ID <- c(1,1,1,1,1,1,1,1)
V_ID <- c(5,5,5,5,8,8,8,8)
T_ID <- c("A","A","B","B","A","A","B","B")
marker1 <- c("+","-","+", "-", "+", "-","+", "-")
marker2 <- c("-","-","-", "-", "-", "-","-", "-")
value <- c(1,2,3,4,5,6,7,8)

df <- data.frame(S_ID, V_ID,T_ID,marker1, marker2, value)

我想从中绘制一个条形图。我尝试了不同的方法,但无法正确处理。值应该在 y 轴上。 x 轴将是 16 个标签,从第 4 列到第 7 列从“++++”到“----”。 (在最小的例子中,每 3 次切一次)

我有不同的(通常是 4 个)Tube ID,所以我希望将“++++”的所有 Tube ID 组合在一起。我还在为 x-labels 添加带有轴功能的轴

我的第一种方法是有 16 列,但由于我也想展示表格,所以这个选项太混乱而且太长了。

到目前为止,我的解决方案包括一个情节,如下所示:

如您所见,我得到了条形图(x 轴在这里没有很好地对齐)但我需要对条形图进行分组,但我不知道如何将表格每 16 行分组一次。

非常感谢您的帮助!

【问题讨论】:

  • 希望最小的例子有效

标签: r plot bar-chart


【解决方案1】:
library('ggplot2')
df1$grp <- factor( with(df1, paste( marker1, marker2, sep = '\n' ) ) )
ggplot(data = df1, mapping = aes( x = grp, y = value, color = T_ID, fill = T_ID)) +
  geom_bar( stat = 'identity', position =  position_dodge(width=0.55), width = 0.5) + 
  theme( axis.text.x = element_text( angle = 0 )) +
  xlab( label = 'Markers' ) + 
  ylab( label = 'Effect' )

在轴上有标记

df1$grp <- factor( with(df1, paste( paste('marker1: ', marker1, sep = ''),
                                    paste('marker2: ', marker1, sep = ''),
                                    sep = '\n' ) ) )
ggplot(data = df1, mapping = aes( x = grp, y = value, color = T_ID, fill = T_ID)) +
  geom_bar( stat = 'identity', position =  position_dodge(width=0.55), width = 0.5) + 
  theme( axis.text.x = element_text( angle = 0 )) +
  xlab( label = 'Markers' ) + 
  ylab( label = 'Effect' )

df1$grp <- factor( with(df1, paste( marker1, marker2, sep = '\n' ) ) )
text_markers <- textGrob( paste( 'marker1', 'marker2', sep = '\n' ), gp=gpar(fontsize=8))
p <- ggplot(data = df1, mapping = aes( x = grp, y = value, color = T_ID, fill = T_ID)) +
  geom_bar( stat = 'identity', position =  position_dodge(width=0.55), width = 0.5) + 
  theme_bw() +
  theme( axis.text.x = element_text( angle = 0 )) +
  scale_y_continuous(limits = c(0,8.5), expand = c(0, 0)) +
  xlab( label = 'Markers' ) + 
  ylab( label = 'Effect' ) + 
  annotation_custom( text_markers, xmin = -Inf, xmax = 0.85, ymin = -Inf, ymax = -1.5 )

gt <- ggplot_gtable(ggplot_build(p))
gt$layout$clip[gt$layout$name == "panel"] <- "off"
grid.draw(gt)

数据:

S_ID <- c(1,1,1,1,1,1,1,1)
V_ID <- c(5,5,5,5,8,8,8,8)
T_ID <- c("A","A","B","B","A","A","B","B")
marker1 <- c("+","-","+", "-", "+", "-","+", "-")
marker2 <- c("-","-","-", "-", "-", "-","-", "-")
value <- c(1,2,3,4,5,6,7,8)
df1 <- data.frame(S_ID, V_ID,T_ID,marker1, marker2, value)

【讨论】:

  • 第一个正是我一直在寻找的。谢谢!使用 R 时总是有新的东西。时差让你很难马上回答:-)
  • 有没有办法为最左侧的标记添加标签,以便从图表中知道哪个标记具有哪个值?
  • 请看一下我的原始帖子,图 3。在查看图表时,知道哪个标记(cd27、cd38 以及更多)代表哪条线是非常有帮助的标签
猜你喜欢
  • 2019-03-04
  • 1970-01-01
  • 2017-01-02
  • 2022-08-02
  • 2016-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多