R 在一个图形中组合两个数据帧
我先有两个数据帧 工人百分比R 在一个图形中组合两个数据帧,r,dataframe,ggplot2,geom-bar,R,Dataframe,Ggplot2,Geom Bar,我先有两个数据帧 工人百分比 Country,Factory,worker_efficiency USA,factory_A,90 Germany,factory_A,93 France,factory_A,90 USA,factory_B,80 Germany,factory_B,94 France,factory_B,91 USA,factory_C,78 Germany,factory_C,95 France,factory_C,92 USA,factory_D,90 Germany,fa
Country,Factory,worker_efficiency
USA,factory_A,90
Germany,factory_A,93
France,factory_A,90
USA,factory_B,80
Germany,factory_B,94
France,factory_B,91
USA,factory_C,78
Germany,factory_C,95
France,factory_C,92
USA,factory_D,90
Germany,factory_D,50
France,factory_D,36
和工厂的百分比
Country,Factory,factory_efficiency
USA,factory_A,95
Germany,factory_A,93
France,factory_A,90
USA,factory_B,96
Germany,factory_B,94
France,factory_B,91
USA,factory_C,97
Germany,factory_C,95
France,factory_C,92
USA,factory_D,90
Germany,factory_D,91
France,factory_D,93
我使用ggplot绘制条形图,这两种方法都使用此命令
factory_plot <- ggplot(percentage_of_factory,aes(Factory,factory_efficiency, fill=Country)) +
geom_bar(stat="identity", position=position_dodge()) + geom_text(aes(label = round(factory_efficiency,1)) , position=position_dodge(width=0.9), vjust=-0.25, size = 3) +
labs(title = "Factory performance percentage", x = "Factory")
worker_plot <- ggplot(percentage_of_worker,aes(Factory,worker_efficiency, fill=Country)) +
geom_bar(stat="identity", position=position_dodge()) + geom_text(aes(label = round(worker_efficiency,1)) , position=position_dodge(width=0.9), vjust=-0.25, size = 3) +
labs(title = "worker performance percentage", x = "Factory")
factory\u plot为此,您需要组合两个数据帧:
df1=read.table(text="Country,Factory,worker_efficiency
USA,factory_A,90
Germany,factory_A,93
France,factory_A,90
USA,factory_B,80
Germany,factory_B,94
France,factory_B,91
USA,factory_C,78
Germany,factory_C,95
France,factory_C,92
USA,factory_D,90
Germany,factory_D,50
France,factory_D,36",sep=",",header=T)
df2=read.table(text="Country,Factory,factory_efficiency
USA,factory_A,95
Germany,factory_A,93
France,factory_A,90
USA,factory_B,96
Germany,factory_B,94
France,factory_B,91
USA,factory_C,97
Germany,factory_C,95
France,factory_C,92
USA,factory_D,90
Germany,factory_D,91
France,factory_D,93",sep=",",header=T)
因为我们想跟踪哪个是工人/工厂的,所以我在两个df中添加了一个额外的列type
:
df1$type<-"worker"
df2$type<-"factory"
在分组中使用ggplot2
和interaction()
绘制直方图
ggplot(dftot)+几何图形条(aes(x=工厂,y=效率,组=交互(类型,国家),填充=国家,alpha=类型),position=“dodge”,color=“grey”,stat=“identity”)+scale\u alpha\u离散(范围=c(0.5,1))
根据Axeman的建议,我添加了alpha
以区分工人和工厂,并添加了刻度\u alpha\u离散(范围=c(0.5,1))
,允许手动设置alpha。
coulour=“grey”
是可选的,它添加了一个轮廓
注意:在interaction()
中因素的顺序很重要,如果您进行交互(国家、类型),工厂将有3个条形,工人将有3个条形。
使用@Haboryme的数据准备(谢谢!):
或:
或:
单从你的图中还不清楚为什么会有两个条形。也许你可以将alpha
映射到type
,或者使用facet来清理问题。我想我可以添加它来设置相应的alpha,但它将它们都设置为1。更改图例时,我一定忘了什么。很抱歉,这是+scale\u alpha\u离散(范围=c(0.5,1))
。我的缺点。使用@Axeman建议的“alpha”可以使差异更清晰,但我们能使差异更清晰的程度有多低?谢谢@Axeman+scale\u alpha\u discrete(range=c(0.5,1))
这是一个更好的解决方案,但我想要的是比较每个工厂和工人的表现,这样我就可以直接看到他们之间的差异;你的解决方案从不同的角度对光线进行阴影处理非常好
df1$type<-"worker"
df2$type<-"factory"
colnames(df1)[3]<-"efficiency"
colnames(df2)[3]<-"efficiency"
dftot=rbind(df1,df2)
ggplot(dftot, aes(x = type, y = efficiency, group = Country, fill = Country))+
geom_bar(position = "dodge", stat = "identity") +
facet_grid(~Factory) +
theme(axis.title.x = element_blank())
ggplot(dftot, aes(x = Factory, y = efficiency, fill = type))+
geom_bar(position = "dodge", stat = "identity") +
facet_grid(~Country) +
theme(axis.title.x = element_blank())
ggplot(dftot, aes(x = Country, y = efficiency, fill = type))+
geom_bar(position = "dodge", stat = "identity") +
facet_grid(~Factory) +
theme(axis.title.x = element_blank())