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

Ben

假设我在ggplot中有以下绘图:

ggplot图

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

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()

我只希望有一个图例可以正确显示形状,颜色和线型(interaction(类型,方法)图例最接近我想要的图例,但它没有正确的形状/线型) 。

我知道如果我使用scale_xxx_manual并且为所有图例指定了相同的标签,那么它们将被合并,但是我不想手动设置标签:如果有新的Method或Types,我不想拥有修改我的代码:想要一些通用的东西。

编辑

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

但是,建议的解决方案在一般情况下仍然不起作用:例如,如果我使用新的“ 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条曲线

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

请注意,向量大小为5,因为我们有5条曲线,而interaction(Type, Method)因子的大小为6(我没有cos / method3组合的数据)

Ben

这是一般情况下的解决方案:

# Create the data frames
x <- seq(0, 10, by = 0.2)
y1 <- sin(x)
y2 <- cos(x)
y3 <- cos(x + pi / 4)
y4 <- sin(x + pi / 4)
y5 <- 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"))
df5 <- data.frame(x, y = y5, Type = as.factor("sin"), Method = as.factor("method3"))

# Merge the data frames
df.merged <- rbind(df1, df2, df3, df4, df5)

# Create the interaction
type.method.interaction <- interaction(df.merged$Type, df.merged$Method)

# Compute the number of types and methods
nb.types <- nlevels(df.merged$Type)
nb.methods <- nlevels(df.merged$Method)

# Set the legend title
legend.title <- "My title"

# Initialize the plot
g <- ggplot(df.merged, aes(x,
                           y,
                           colour = type.method.interaction,
                           linetype = type.method.interaction,
                           shape = type.method.interaction)) + geom_line() + geom_point()
# Here is the magic
g <- g + scale_color_discrete(legend.title)
g <- g + scale_linetype_manual(legend.title,
                               values = rep(1:nb.types, nb.methods))
g <- g + scale_shape_manual(legend.title,
                            values = 15 + rep(1:nb.methods, each = nb.types))
# Display the plot
print(g)

结果如下:

解决方案

  • 窦曲线绘制为实线,余弦曲线绘制为虚线。
  • “ method1”数据使用实心圆表示形状。
  • “ method2”数据使用实心三角形表示形状。
  • “ method3”数据使用填充菱形表示形状。
  • 图例与曲线匹配

总结一下,这些技巧是:

  • 将类型/方法interaction用于所有数据表示形式(颜色,形状,线型等)
  • 然后使用手动设置曲线样式和图例样式scale_xxx_manual
  • scale_xxx_manual 允许您提供比实际曲线数更长的值向量,因此很容易根据“类型”和“方法”因子的大小来计算样式向量值

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ggplot2:将形状,颜色和线条样式合并为一个图例

来自分类Dev

如何在ggplot2中合并图例?(保持形状、颜色和标签)

来自分类Dev

在“ plotnine”图例中合并颜色和形状

来自分类Dev

如何在ggplot2中为颜色和形状创建图例

来自分类常见问题

如何在ggplot2中加入线条和功能区图例?

来自分类Dev

如何在ggplot2中加入线条和功能区图例?

来自分类Dev

未指定aes()颜色和形状时,ggplot中的图例

来自分类Dev

ggplot2:将颜色和形状的图例合并/合并为一个

来自分类Dev

图例和线条颜色中的R ggplot散点图控制点

来自分类Dev

图例和线条颜色中的R ggplot散点图控制点

来自分类Dev

如何在ggplot中为线条设置不同的颜色

来自分类Dev

如何在一个图例中合并Alpha和颜色

来自分类Dev

ggplot颜色图例形状混合了字母数字和形状

来自分类Dev

在JFreeChart中设置系列线条样式和图例大小

来自分类Dev

ggplot图例中的形状和字符重叠

来自分类Dev

使用ggplot根据线条颜色设置图例

来自分类Dev

如何在VBA Powerpoint中仅更改线条形状颜色

来自分类Dev

如何组织ggplot图例行中每种颜色的所有形状?

来自分类Dev

如何从ggplot2图例中删除线条美感?

来自分类Dev

如何将颜色和线型的图例组合成 ggplot 中的单个图例?

来自分类Dev

Qplot线条颜色和图例美学

来自分类Dev

R ggplot更改图例中的颜色和图例序列

来自分类Dev

添加geom_smooth时,如何为图例中的点获取适当的形状和颜色?

来自分类Dev

从颜色中删除线条并填充图例

来自分类Dev

如何创建具有颜色和形状的图例

来自分类Dev

更改 ggplot 中的线条颜色

来自分类Dev

不要在2图例图(R ggplot2)中的颜色图例中显示形状

来自分类Dev

matplotlib图例仅基于线条样式而不基于颜色

来自分类Dev

如何在需要时在视图上绘制形状和线条?

Related 相关文章

  1. 1

    ggplot2:将形状,颜色和线条样式合并为一个图例

  2. 2

    如何在ggplot2中合并图例?(保持形状、颜色和标签)

  3. 3

    在“ plotnine”图例中合并颜色和形状

  4. 4

    如何在ggplot2中为颜色和形状创建图例

  5. 5

    如何在ggplot2中加入线条和功能区图例?

  6. 6

    如何在ggplot2中加入线条和功能区图例?

  7. 7

    未指定aes()颜色和形状时,ggplot中的图例

  8. 8

    ggplot2:将颜色和形状的图例合并/合并为一个

  9. 9

    图例和线条颜色中的R ggplot散点图控制点

  10. 10

    图例和线条颜色中的R ggplot散点图控制点

  11. 11

    如何在ggplot中为线条设置不同的颜色

  12. 12

    如何在一个图例中合并Alpha和颜色

  13. 13

    ggplot颜色图例形状混合了字母数字和形状

  14. 14

    在JFreeChart中设置系列线条样式和图例大小

  15. 15

    ggplot图例中的形状和字符重叠

  16. 16

    使用ggplot根据线条颜色设置图例

  17. 17

    如何在VBA Powerpoint中仅更改线条形状颜色

  18. 18

    如何组织ggplot图例行中每种颜色的所有形状?

  19. 19

    如何从ggplot2图例中删除线条美感?

  20. 20

    如何将颜色和线型的图例组合成 ggplot 中的单个图例?

  21. 21

    Qplot线条颜色和图例美学

  22. 22

    R ggplot更改图例中的颜色和图例序列

  23. 23

    添加geom_smooth时,如何为图例中的点获取适当的形状和颜色?

  24. 24

    从颜色中删除线条并填充图例

  25. 25

    如何创建具有颜色和形状的图例

  26. 26

    更改 ggplot 中的线条颜色

  27. 27

    不要在2图例图(R ggplot2)中的颜色图例中显示形状

  28. 28

    matplotlib图例仅基于线条样式而不基于颜色

  29. 29

    如何在需要时在视图上绘制形状和线条?

热门标签

归档