ggplot堆积的条形图,具有不同数量的x轴类别,但是条形宽度恒定

时间:2018-04-23 19:40:05

标签: r ggplot2 charts

我为报告生成了多个堆积条形图。每个图表代表不同的区域,并且可能具有不同数量的x轴类别。为了在不同的图表之间保持一致的视觉效果,我希望确保条形的宽度在不同的图表之间保持不变。我目前无法做到这一点,因为具有较少x轴类别的图表具有更宽的条形。似乎d={10:[2,"str1",4] , 20:[5,"str2",7] , 30:[8,"str3",10]} print([[k]+v for k,v in d.items()]) dodge的组合可能适用于标准条形图,但这对堆叠条形图不起作用。请注意,有100个可能的x轴类别,但每个图表上实际只显示3到6个(最多6个)。 有没有人知道指定一个恒定条宽的方法,然后可以应用于所有图表?

对于少于6个类别的区域,我想到的是在图表的右端添加额外的空类别(总计为6),然后以某种方式设置绘图面板宽度,以便剪切这些最后的空占位符关闭。我不确定如何实现占位符的切断。

以下是基本问题的一个简单示例。

width

1 个答案:

答案 0 :(得分:1)

最终条形宽度将由保存绘图的宽度决定,但如果要在绘图中缩放,只需将width乘以x值除以最大可能值:

library(ggplot2)

df1 <- data.frame(variable_name = c(rep('var1', 3), rep('var2', 4), rep('var3', 3), rep('var4', 4)),
                  var_value = c(1,4,2,4,3,6,2,1,6,3,1,3,2,4),
                  value_type = c('A','B','C','A','B','C','D','B','C','D','B','D','E','F'))

df2 <- data.frame(variable_name = c(rep('var6', 4), rep('var4', 4)),
                  var_value = c(4,3,6,2,1,3,2,4),
                  value_type = c('A','B','C','D','B','D','E','F'))

ggplot(df1, aes(x = variable_name, y = var_value, fill = value_type)) + 
    geom_col(width = 0.8 * length(unique(df1$variable_name)) / 6)

ggplot(df2, aes(x = variable_name, y = var_value, fill = value_type)) + 
    geom_col(width = 0.8 * length(unique(df2$variable_name)) / 6)