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())