我是 ggplot2 的绝对初学者,并尝试使用这个包绘制漂亮的图形。我正在阅读手册,但不明白 scale_colour_gradient()
与 scale_fill_gradient()
之间的区别在我的分析中,我将使用“假设”进行观察,因为我不确定我的结论。
这是对我有用的原始代码:
实验1
erupt <- ggplot(faithfuld, aes(waiting, eruptions, fill = density)) +
geom_raster()
erupt
假设:它使用默认颜色(即蓝色)绘制喷发密度
我想进一步尝试 ggplot2
的 scale_colour_gradient()
和 scale_fill_gradient()
实验2
erupt <- ggplot(faithfuld, aes(waiting, eruptions)) +
geom_raster(aes(fill=density)) +
scale_colour_gradient(low = "white", high = "black")
erupt
现在,我得到了与实验 1 相同的图表。这是否意味着如果我在 ggplot 的美学中使用 fill= xyz,我将设置颜色渐变而不是填充渐变?为了理解我为什么问这个问题,让我们看看实验 3。
实验3
erupt <- ggplot(faithfuld, aes(waiting, eruptions)) +
geom_raster(aes(fill=density)) +
scale_fill_gradient(low = "white", high = "black")
erupt
在这里,我唯一改变的是使用 scale_fill_gradient
而不是 scale_color_gradient
。然而,图表完全不同。它的范围从黑色到白色。
有人可以帮我理解发生了什么事吗?具体来说,我有两个问题:
a) 当我们设置 fill = xyz 时,它设置的是颜色还是填充?
b) scale_fill_gradient
和 scale_color_gradient
之间有什么区别?
如果我的问题对您来说太基本了,我深表歉意。我不是专家,还有很长的路要走。
更新:经过讨论,结论如下:
在实验 1 中:该图仅使用连续变量“密度”进行填充。
在实验2中,我填充了“密度”,但随后覆盖了“颜色”。因此, ggplot 尝试对栅格图的边框进行着色(因为我覆盖了颜色)并且与填充无关,因为我没有覆盖任何东西。
在实验3中,我填充并覆盖,所以我看到白色和黑色的图。
为了解决这个问题,我做了两件事:
实验 2: 修复#1:
ggplot(faithfuld, aes(waiting, eruptions, fill = density)) +
geom_raster(aes(colour=density)) +
scale_colour_gradient(low = "white", high = "red") +
scale_fill_gradient(low = "white", high = "green")
或
修复#2:
ggplot(faithfuld, aes(waiting, eruptions, fill = density)) +
geom_raster(aes(colour=density)) +
scale_colour_gradient(low = "white", high = "black")
此外,为了补充 axeman 的观点,这就是我所做的:
ggplot(faithfuld, aes(waiting, eruptions, fill = density)) +
geom_tile(aes(fill=density, col=density)) +
scale_colour_gradient(low = "white", high = "red") +
scale_fill_gradient(low = "white", high = "green")
在输出中,我们将看到图 block 的边框根据密度(即红色)进行着色,填充颜色根据绿色进行着色。这样,我们就能够演示填充和颜色的效果。
最佳答案
在 ggplot2
, color
和fill
分别映射。 color
指点和线的颜色,而 fill
指条形填充(即内部颜色)、密度填充等。如果映射 fill=xyz
aes()
内然后使用 scale_color_...
,它不会做任何事情,因为你必须控制 fill
与 scale_fill_...
。如果你映射color
在这种情况下,它将改变密度周围线条的颜色;那么您可以调用scale_color_...
来改变它。
关于r - ggplot2 中的scale_colour_gradient 与scale_fill_gradient,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39128590/