ggplot渐变填充不起作用

van*_*yan 5 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)
Run Code Online (Sandbox Code Playgroud)

上面代码的输出是,

在此输入图像描述

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

需要一些专家观点.

eip*_*i10 6

渐变填充是正确的.这是不正确的文本值.注意,例如,在下面的数据Horse,并B具有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
Run Code Online (Sandbox Code Playgroud)

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

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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这似乎是一个玩具的例子,但我想我也会指出你可以通过使用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")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述