gpt4 book ai didi

r - 如何在 ggplot 中合并颜色、线条样式和形状图例

转载 作者:行者123 更新时间:2023-12-03 01:51:43 26 4
gpt4 key购买 nike

假设我在 ggplot 中有以下情节:

ggplot graph

它是使用以下代码生成的:

x <- seq(0, 10, by = 0.2)
y1 <- sin(x)
y2 <- cos(x)
y3 <- cos(x + pi / 4)
y4 <- sin(x + pi / 4)
df1 <- data.frame(x, y = y1, Type = as.factor("sin"), Method = as.factor("method1"))
df2 <- data.frame(x, y = y2, Type = as.factor("cos"), Method = as.factor("method1"))
df3 <- data.frame(x, y = y3, Type = as.factor("cos"), Method = as.factor("method2"))
df4 <- data.frame(x, y = y4, Type = as.factor("sin"), Method = as.factor("method2"))

df.merged <- rbind(df1, df2, df3, df4)

ggplot(df.merged, aes(x, y, colour = interaction(Type, Method), linetype = Method, shape = Type)) + geom_line() + geom_point()

我只想有一个图例能够正确显示形状、颜色和线条类型(交互(类型,方法)图例最接近我想要的,但它没有正确的形状/线型)。

我知道,如果我使用scale_xxx_manual并且为所有图例指定相同的标签,它们将被合并,但我不想手动设置标签:如果有新的方法或类型,我不想修改我的代码:想要通用的东西。

编辑

正如下面的答案所指出的,在这种特殊情况下有几种方法可以完成工作。所有建议的解决方案都需要使用 scale_xxx_manual 函数 或使用 guides 函数手动设置图例线类型和形状。

但是,所提出的解决方案在一般情况下仍然不起作用:例如,如果我使用新的“method3”方法向数据集中添加新的数据框,它就不再起作用了,我们必须手动添加新的图例形状和线型:

y5 <- sin(x - pi / 4)
df5 <- data.frame(x, y = y5, Type = as.factor("sin"), Method = as.factor("method3"))
df.merged <- rbind(df1, df2, df3, df4, df5)
override.shape <- c(16, 17, 16, 17, 16)
override.linetype <- c(1, 1, 3, 3, 4)

g <- ggplot(df.merged, aes(x, y, colour = interaction(Type, Method), linetype = Method, shape = Type)) + geom_line() + geom_point()
g <- g + guides(colour = guide_legend(override.aes = list(shape = override.shape, linetype = override.linetype)))
g <- g + scale_shape(guide = FALSE)
g <- g + scale_linetype(guide = FALSE)
print(g)

这给出:

5 curves

现在的问题是:如何自动生成override.shapeoverride.linetype向量?

请注意,矢量大小为 5,因为我们有 5 条曲线,而交互(类型,方法) 因子的大小为 6(我没有 cos/method3 组合的数据)

最佳答案

使用labs()并为定义几何外观的所有美学设置相同的值。

library('ggplot2')
ggplot(iris) +
aes(x = Sepal.Length, y = Sepal.Width,
color = Species, linetype = Species, shape = Species) +
geom_line() +
geom_point() +
labs(color = "Guide name", linetype = "Guide name", shape = "Guide name")

关于r - 如何在 ggplot 中合并颜色、线条样式和形状图例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37140266/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com