这可以通过以下步骤实现:
- 按类别(cat)降序排列您的df,使A和B排在最后
- 将条件
cat %in% c("A", "B")
映射到linetype上
- 使用
scale_linetype_manual
设置TRUE和FALSE的linetypes
- 使用
guides
去掉linetype图例
library(reshape2)
library(ggplot2)
df = data.frame(cat = LETTERS[1:6], VAR1 = runif(6), VAR2 = runif(6), VAR3 = runif(6), VAR4 = runif(6))
df_melted = melt(df, id.vars = 'cat')
df_melted <- arrange(df_melted, desc(cat))
ggplot(df_melted, aes(x = variable, y = value)) +
geom_line(aes(color = cat, group = cat, linetype = cat %in% c("A", "B"))) +
scale_linetype_manual(values = c("TRUE" = "solid", "FALSE" = "dotted")) +
guides(linetype = FALSE)
![](https://i.imgur.com/bKDNNSo.png)
编辑 实现你的结果的另一种方法可能如下所示。我在这里也使用了相同的模式来调整大小。我喜欢这种方法的原因是我们不需要条件,而且只有一个图例:
library(reshape2)
library(ggplot2)
library(dplyr)
df = data.frame(cat = LETTERS[1:6], VAR1 = runif(6), VAR2 = runif(6), VAR3 = runif(6), VAR4 = runif(6))
df_melted = melt(df, id.vars = 'cat')
df_melted <- arrange(df_melted, desc(cat))
ggplot(df_melted, aes(x = variable, y = value, group = cat)) +
geom_line(aes(color = cat, linetype = cat, size = cat)) +
scale_linetype_manual(values = c(A = "solid", B = "solid", rep("dotted", 4))) +
scale_size_manual(values = c(A = 1, B = 1, rep(.5, 4)))
![](https://i.imgur.com/BqJIOpT.png)
guides(linetype=FALSE)
这一行即可。如果您想要为图例添加漂亮的标签,可以在scale_linetype_manual
中使用labels = c("TRUE" = XXX, "FALSE" = YYY)
。 - stefan