【发布时间】:2025-12-03 06:40:01
【问题描述】:
我是 ggplot2 的绝对初学者。我对 ggplot2 感到沮丧并开始阅读 Wickham 的这本很棒的书。他说“情节中使用的每一种美学都需要一个比例。”。
所以,我做了以下事情:
尝试 1:
huron <- data.frame(year = 1875:1972, level = as.numeric(LakeHuron))
ggplot(huron, aes(year)) +
geom_line(aes(y = level + 5, color = "y+5")) +
scale_color_manual(values = c("orange")) +
geom_line(aes(y = level - 5, color = "y-5")) +
scale_color_manual(values = "blue")
运行此程序时,我收到一条错误消息" insufficient value of colors provided."
我用谷歌搜索了这个并在 SO 上找到了以下线程:ggplot2 Error: Insufficient values in manual scale。在原始帖子中,他/她为什么添加额外的颜色是有道理的。但是,我不确定为什么在我的示例中会出现这种情况,因为我有两层,每一层都有自己的美感。
试试 2
此代码将起作用:(如我可以看到两种不同颜色的两条线图和一个图例--这是我的目标)
ggplot(huron, aes(year)) +
geom_line(aes(y = level + 5, color = "y+5")) +
scale_color_manual(values = c("orange", "blue")) + #Added another color here.
geom_line(aes(y = level - 5, color = "y-5"))
令人惊讶的是,上面的代码显示了一些奇怪的东西——我有两种美学和一种尺度。
问题 1: 这很令人惊讶,因为我们可以看到有两个 geom 但只有一个比例。正确的?我知道威克姆不会错。那么,我错过了什么?
问题 2: 另外,出于好奇,如果我有多个几何图形,每个几何图形都具有一种美学,如上述情况,并且每个几何图形都有一个比例,ggplot 将如何知道哪个比例与哪个几何?如,ggplot2 如何知道 layer1 是否与 color = red 一起使用 scale 而 layer2 是否与 color = blue 一起使用?
非常感谢您的想法。提前致谢。
【问题讨论】:
-
你有一种审美。您通过第二次调用 aes 添加两个它并不会改变您仅定义(一个)颜色美学映射。 ggplot2 图中只能有一个色标。
-
@Roland 感谢您的帮助。所以,如果我理解正确的话——无论我拥有多少美学,最多只能有一个色阶。但是,如果我想改变不同美学的颜色怎么办——在这个例子中:
ggplot(mpg, aes(displ, hwy)) + geom_point(aes(colour = class)) + geom_smooth(method = "lm", se = FALSE, color = "red")在这里,我有两种美学的不同颜色。不是吗? -
在本例中,您有一个美学映射(
class映射到颜色,只有这会产生图例)。在geom_smooth中,您不使用aes,只定义“手动”颜色。 -
@Roland 我明白了。谢谢。我想我明白了。我在上面的示例中摆脱了审美,因为它没有解决任何目的:a)我无法将
lm线的颜色变为红色 b)我没有看到图例。这是带有aes()的代码:ggplot(mpg, aes(displ, hwy)) + geom_point(aes(colour = class)) + geom_smooth(method = "lm", se = FALSE, aes(color = "red"))你认为你可以指导我如何让lm 的图例和颜色更改为“红色”而不是默认颜色。我一无所知。