结合ggplots擦除原始情节?

时间:2016-12-07 14:01:32

标签: r plot ggplot2 erase

我尝试对齐使用geom_bar获得的不同图。当我逐个运行每个情节时,效果很好。我得到了我想要的东西。但是当我将所有这些聚合成一个多重图时,我总是一样....

要明确:这是第一个好的情节: enter image description here

这是我在结合两个情节时得到的结果。第一列应该与上面的图相同......: enter image description here

我无法找到问题所在。这是我的剧本:

##### colonne 6
i=6
col=compil[,i]
nom=names(compil[i])
maxi = max(col)
mini = min(col)

p5 <- ggplot(compil,aes(x=NIVEAU, y=col)) + 
  geom_bar(stat="identity",position = "identity",aes(width=0.85),
           fill=ifelse(col > 1, rgb(63,202,20, maxColorValue = 255),
                       ifelse (col< -1,rgb(204,0,0, maxColorValue = 255),
                               rgb(160,160,160, maxColorValue=255))) ) +
  geom_hline(yintercept=0,color=rgb(160,160,160, maxColorValue=255))+
  coord_flip(ylim=c(-2.5,2.5)) +
  labs(x="", y="", title= nom) + guides(fill=F) +
  theme(panel.grid.major=element_blank(), panel.grid.minor.x=element_blank(),
        panel.background = element_blank(), axis.text.x=element_blank(),
        axis.ticks  = element_blank(),axis.line= element_blank(),
        plot.margin=unit(c(1,-1,1,-1),"lines"), plot.title = element_text(size=10))
print(p5)

##### colonne 7
i=7
col=compil[,i]
nom=names(compil[i])
maxi = max(col)
mini = min(col)

p6 <- ggplot(compil,aes(x=NIVEAU, y=col)) + 
  geom_bar(stat="identity",position = "identity",aes(width=0.85),
           fill=ifelse(col > 1, rgb(63,202,20, maxColorValue = 255),
                       ifelse (col< -1,rgb(204,0,0, maxColorValue = 255),
                               rgb(160,160,160, maxColorValue=255))) ) +
  geom_hline(yintercept=0,color=rgb(160,160,160, maxColorValue=255))+
  coord_flip(ylim=c(-2.5,2.5)) +
  labs(x="", y="", title= nom) + guides(fill=F) +
  theme(panel.grid.major=element_blank(), panel.grid.minor.x=element_blank(),
        panel.background = element_blank(), axis.text=element_blank(),
        axis.ticks  = element_blank(),axis.line= element_blank(),
        plot.margin=unit(c(1,-1,1,-1),"lines"), plot.title = element_text(size=10))
print(p6)

vplayout <- function(x, y) viewport(layout.pos.row = x, layout.pos.col = y)
grid.newpage()
pushViewport(viewport(layout = grid.layout(1, 3)))
print(p5, vp = vplayout(1, 1:2))
print(p6, vp = vplayout(1, 3))

如果有人能帮助我找到错误,我真的很感激!!当然,我做错了什么但是什么? 提前感谢您的时间和帮助!

1 个答案:

答案 0 :(得分:0)

tl; dr 尝试将aes(x=NIVEAU, y=col)替换为aes_string(x="NIVEAU", y = nom, fill = nom),其中nom = names(compil)[i]

col似乎是一个向量,但在aes()内,您应该从data.frame传递未加引号的变量。直接传递值会带来意外,因为ggplot2并不真正知道在哪里寻找&#34; col&#34;在构建情节时 - 它正在寻找与情节环境相关的数据中的这样一个变量,并且它不在那里,所以接下来就是在全球环境中寻找..

出于同样的原因,fill = ifelse()内容可以按预期工作,应该删除。将颜色映射到值是ggplot2中比例的作用,因此只需映射fill = nom,然后添加scale_fill_manual(...)或任何其他类型的兼容比例。

(猜测,因为那里没有可重复的代码)