在ggplot2中手动编辑时,为什么会出现两个图例?

时间:2018-11-11 15:18:16

标签: r ggplot2

我要绘制两条线,一条实线,另一条虚线,并用不同的颜色绘制。我在处理这个情节的传说时遇到麻烦。举个例子:

library(ggplot2)
library(reshape2)

df = data.frame(time = 0:127,
                mean_clustered = rnorm(128),
                mean_true = rnorm(128)
)
test_data_long <- melt(df, id="time")  # convert to long format
p = ggplot(data=test_data_long,
           aes(x=time, y=value, colour=variable)) +
  geom_line(aes(linetype=variable)) +
  labs(title = "", x = "Muestras", y = "Amplitud", color = "Spike promedio\n") +
  scale_color_manual(labels = c("Hallado", "Real"), values = c("blue", "red")) +
  xlim(0, 127)

print(p)

出现两个图例,最上面的图例都不正确(颜色正确的一个具有错误的线条样式,颜色正确的一个具有所有其他错误)。

enter image description here

为什么会发生这种情况,如何使正确的图例出现?

1 个答案:

答案 0 :(得分:2)

您需要确保所有美学映射在您使用的不同美学之间匹配:

library(ggplot2)
library(reshape2)

data.frame(
  time = 0:127,
  mean_clustered = rnorm(128),
  mean_true = rnorm(128)
) -> xdf

test_data_long <- melt(xdf, id = "time")

ggplot(
  data = test_data_long,
  aes(x = time, y = value, colour = variable)
) +
  geom_line(aes(linetype = variable)) +
  scale_color_manual(
    name = "Spike promedio\n", labels = c("Hallado", "Real"), values = c("blue", "red")
  ) + 
  scale_linetype(
    name = "Spike promedio\n", labels = c("Hallado", "Real")
  ) +
  labs(
    x = "Muestras", y = "Amplitud", title = ""
  ) +
  xlim(0, 127)

enter image description here

可能我还建议您使用主题参数来调整图例标题:

ggplot(data = test_data_long, aes(x = time, y = value, colour = variable)) +
  geom_line(aes(linetype = variable)) +
  scale_x_continuous(name = "Muestras", limits = c(0, 127)) +
  scale_y_continuous(name = "Amplitud") +
  scale_color_manual(name = "Spike promedio", labels = c("Hallado", "Real"), values = c("blue", "red")) + 
  scale_linetype(name = "Spike promedio", labels = c("Hallado", "Real")) +
  labs(title = "") +
  theme(legend.title = element_text(margin = margin(b=15)))