1

我是 ggplot2 的新手,我有一个找不到答案的问题。我创建了以下玩具数据来帮助解释:

data <- data.frame(tech=c(rep(letters[1:15],2)), 
     sep=c(rep(c("SitutationA", "SitutationB"),each=15)), 
     error=c(runif(15,min=-0.2, max=0.5), runif(15, min=0.3, max=1)))

我想绘制一个geom_bar图表,显示每种技术“技术”(x 轴)的“错误”(y 轴),使用facet_grid. 每个条的颜色 ( fill) 应该代表每种技术的“错误”,而不是技术(作为一个因素)。情况 A 和 B 的误差以不同的尺度测量。但是,在我的代码中,相同值的错误在两种情况下都具有相同的颜色。我不想要这种行为,因为它们是用不同的尺度测量的。因此,我希望情况 A 和 B 中的颜色是独立的。

以下代码绘制图形,但在两种情况下使用相同的颜色。

ggplot(data, aes(x=tech, y=error)) +
  geom_bar(aes(fill=error), stat="identity", position="dodge") + 
  facet_grid(sep ~ ., scales="free_y") + 
  scale_fill_continuous(guide=FALSE)

如何为每个方面(情况 A 和情况 B)使用不同的连续填充?

谢谢你。

4

1 回答 1

1

在同一个图上不能有两个不同的填充比例。

该问题的解决方案可能是制作两个图,然后将它们与grid.arrange()from library放在一起gridExtra

在第一个图中只放 的值SitutationA。更改了 y 比例以显示小数点后有两个数字的值(与第二个图相同)。删除了 x 轴标题、文本和刻度并更改了绘图边距 - 将底部边距设置为 -0.4 以减少绘图之间的空间。

library(grid)
library(gridExtra)
p1<-ggplot(subset(data,sep=="SitutationA"), aes(x=tech, y=error)) +
  geom_bar(aes(fill=error), stat="identity", position="dodge") + 
  facet_grid(sep ~ ., scales="free_y") + 
  scale_fill_continuous(guide=FALSE)+
  scale_y_continuous(breaks=c(0,0.25,0.50))+
  theme(axis.text.x=element_blank(),
        axis.title.x=element_blank(),
        axis.ticks.x=element_blank(),
        plot.margin=unit(c(1,1,-0.4,1),"lines"))

对于第二个图 ( SitutationB),将顶部图边距更改为 -0.4 以减少图之间的空间。然后更改scale_fill_continuous()并提供新颜色。

p2<-ggplot(subset(data,sep=="SitutationB"), aes(x=tech, y=error)) +
  geom_bar(aes(fill=error), stat="identity", position="dodge") + 
  facet_grid(sep ~ ., scales="free_y") + 
  scale_fill_continuous(guide=FALSE,low="red",high="purple") +
  theme(plot.margin=unit(c(-0.4,1,1,1),"lines"))

现在把两个图放在一起。

grid.arrange(p1,p2)

在此处输入图像描述

于 2013-03-19T06:02:14.393 回答