ggplot多重分组柱形图

12

我想知道如何将9个分组条形图(3x3)放在一起。

我的CSV文件:

data <- read.csv("http://pastebin.com/raw.php?i=6pArn8GL", sep = ";")

按照“Type” A到I分组,应该将9个绘图放在一起。

然后,每个分组的条形图应该在y轴上显示频率,x轴按1个到6个进行分组,再按年份进行细分。

我在Excel中有以下示例(参见图片),并希望使用ggplot在R中创建相同的结果。这是可能的吗?

enter image description here

2个回答

31

首先,将您的数据从宽格式转换为长格式。

library(reshape2)
df.long<-melt(df,id.vars=c("ID","Type","Annee"))

接下来,在导入数据时,如果变量名以数字开头,则会将字母X添加到变量名中,使用 substring() 函数去除它。

df.long$variable<-substring(df.long$variable,2)

现在将variable用作x,将value用作y,将Annee用于填充,并使用geom_bar()获取条形图。使用facet_wrap()可以按Type拆分数据。

ggplot(df.long,aes(variable,value,fill=as.factor(Annee)))+
   geom_bar(position="dodge",stat="identity")+
   facet_wrap(~Type,nrow=3)

输入图片描述


1
你好,谢谢。但是在我的电脑上出现了一个错误信息,显示“Error in layout_base(data, vars, drop = drop) : At least one layer must contain all variables used for facetting”。这让我感到有些困扰。 - S12000
@Swiss12000 你是否使用了和我的代码完全相同的方式?如果没有,请在你的问题中添加你所使用的代码。 - Didzis Elferts
确实,我需要一个错误完美地工作,谢谢你的帮助。我有《R Graphics Cookbook》来学习ggplot,但他们没有提到如何制作更复杂的图表。你是每天学一点ggplot还是读了高级书籍? - S12000
2
@Swiss12000 我是通过实践、阅读和在SO上回答问题来学习的。 - Didzis Elferts
1
我发现这份关于melt的文档非常有用:http://www.cookbook-r.com/Manipulating_data/Converting_data_between_wide_and_long_format/ - GermanK
请问 tidyr 的版本是多少? - Mostafa90

10

使用 @Didzis 改变数据后,这里是格点化版本:

barchart(value~variable|Type,
         groups=Annee,data=df.long,layout=c(3,3),
         between=list(3,3),
         axis=axis.grid,
         auto.key=TRUE)

在此输入图像描述


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接