【问题标题】:Different fills for different facet_grids using geom_bar使用 geom_bar 对不同 facet_grids 进行不同填充
【发布时间】:2013-03-19 01:44:30
【问题描述】:

我是 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 图表,显示使用facet_grid 划分为两种不同情况(SituationA 和 SituationB)的每种技术“tech”(x 轴)的“error”(y 轴)。每个条的颜色 (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)使用不同的连续填充?

谢谢。

【问题讨论】:

    标签: r ggplot2 fill


    【解决方案1】:

    您不能在同一个地块上有两种不同的填充比例。

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

    在第一个图中只放置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)
    

    【讨论】:

    • 谢谢Didzis Elferts。我认为有一个技巧可以在不使用 grid.arrange 的情况下解决我的问题。无论如何,我还没有将 facet_grid 与 grid.arrange 一起使用,而且我认为它看起来比我的旧图要好得多。
    猜你喜欢
    • 2012-08-24
    • 1970-01-01
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-24
    • 2014-01-03
    • 2014-04-29
    相关资源
    最近更新 更多