在ggplot中,将所有正值条形图的颜色主题与具有负值的条形图相同。

7

我昨天刚开始接触ggplot。我的带有负值的柱状图代码效果如预期:

dtf1 <- data.frame(ID = c(1:10),Diff = c(-5:4))
dtf1$colour <- ifelse(dtf1$Diff < 0, "firebrick1","steelblue")
dtf1$hjust <- ifelse(dtf1$Diff > 0, 1.3, -0.3)
ggplot(dtf1,aes(ID,Diff,label="",hjust=hjust))+
  geom_text(aes(y=0,colour=colour))+
  geom_bar(stat="identity",position="identity",aes(fill = colour))

正负值 但是,当我将相同的代码应用于仅具有正值的不同数据集时情况并非如此。

dtf <- data.frame(ID = c(1:10),Diff = rnorm(10,3))
dtf$colour <- ifelse(dtf$Diff < 0, "firebrick1","steelblue")
dtf$hjust <- ifelse(dtf$Diff > 0, 1.3, -0.3)
ggplot(dtf,aes(ID,Diff,label="",hjust=hjust))+
  geom_text(aes(y=0,colour=colour))+
  geom_bar(stat="identity",position="identity",aes(fill = colour))

仅有正值

我发现我可以调整代码的最后一行,以获得我的正数条形图的蓝色颜色, geom_bar(stat="identity",position="identity",fill="steelblue")

因此,我的两个问题是:

  1. 然而,颜色并不如预期:

正值 - 变成蓝色

看起来颜色可能更接近于turquoise3而不是steelblue。

  1. 此外,我还想知道为什么相同的代码会允许正数条具有不同的颜色。

我肯定问了一个非常简单的问题。我不知道该如何更好地表达它,因此很难找到解决方案。如果已经有人问过这个问题,我会很高兴删除自己。

1个回答

10
美学在ggplot中并不是这样实现的。$colour被视为一个具有两个级别(firebrick1和steelblue)的因子,但这些不是ggplot使用的颜色,它们只是颜色比例尺的标签。ggplot会选择自己的颜色。如果您想覆盖默认设置,请添加以下代码:
scale_fill_manual(values=c(firebrick1="firebrick1",steelblue="steelblue"))

相比之下:

dtf1$colour <- ifelse(dtf1$Diff < 0, "negative","positive")
ggplot(dtf1,aes(ID,Diff,label="",hjust=hjust))+
  geom_bar(stat="identity",position="identity",aes(fill = colour))+
  scale_fill_manual(values=c(positive="firebrick1",negative="steelblue"))

这适用于所有正数(或负数)。

dtf <- data.frame(ID = c(1:10),Diff = rnorm(10,3))
dtf$colour <- ifelse(dtf$Diff < 0,"negative","positive")
dtf$hjust <- ifelse(dtf$Diff > 0, 1.3, -0.3)
ggplot(dtf,aes(ID,Diff,label="",hjust=hjust))+
  geom_bar(stat="identity",position="identity",aes(fill = colour))+
  scale_fill_manual(values=c(positive="firebrick1",negative="steelblue"))


谢谢 - 我非常感激有一个适用于所有图形的代码。我对颜色的解释是错误的。 - shirleywu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接