ggplot渐变填充不起作用

时间:2017-03-01 06:33:22

标签: r ggplot2

我有以下数据集和r代码来生成ggplot。

   df = data.frame(Animals = c("Dog", "Cat", "Horse", "Giraffe"), Number =           c(88, 11, 107, 59),
            Cat = c("A", "A", "B", "B"),
            Place=c("Place1","Place2"))
 ggplot(df, aes(Animals, Cat, fill=Number)) + 
 geom_tile() +
 scale_fill_gradient2(low= "red", high = "green",
                   mid = "orange",
                   midpoint = 50,
                   space = "Lab")+
geom_text(label=df$Number)+
facet_grid(.~Place)

上面代码的输出是,

enter image description here

如果您看到图表,则渐变填充不会在代码中提到。 根据代码,较高的数字应为绿色。

需要一些专家观点。

1 个答案:

答案 0 :(得分:6)

渐变填充是正确的。它的文本值不正确。请注意,例如,在下面的数据中HorseB的值为107,但图中该图块的文本值为11。

  Animals Number Cat  Place
1     Dog     88   A Place1
2     Cat     11   A Place2
3   Horse    107   B Place1
4 Giraffe     59   B Place2

更改为geom_text(aes(label=Number))。通过使用geom_text(label=df$Number),您可以在ggplot环境之外到达df的全局环境版本,其中Number的值为(按数据框中的顺序排列), 88,11,107,59。这就是图中数字的绘制顺序(从左到右)。但是,通过使用Number 映射 labelaes(label=Number),您可以确保label美学和fill美学两者都以相应的方式映射到图形,由"自然" ggplot geoms和美学映射的逻辑。

ggplot(df, aes(Animals, Cat, fill=Number)) + 
  geom_tile() +
  scale_fill_gradient2(low= "red", high = "green", mid = "orange",
                       midpoint = 50, space = "Lab")+
  geom_text(aes(label=Number)) +
  facet_grid(.~Place)

enter image description here

这似乎是一个玩具示例,但我想我还指出,当您面对时,您可以使用scales="free_x"为空值移除ggplot空间:

ggplot(df, aes(Animals, Cat, fill=Number)) + 
  geom_tile() +
  scale_fill_gradient2(low= "red", high = "green", mid = "orange",
                       midpoint = 50, space = "Lab")+
  geom_text(aes(label=Number)) +
  facet_grid(.~Place, scales="free_x")

enter image description here