在 ggplot2 中更改图例标题时出现幽灵图例?

ghost legend appearing when changing legend title in ggplot2?

我已经尝试了好几个小时来调整 ggplot2 线图中的图例标题,但当我这样做时,我得到一个 'ghost legend' 出现在真实图例下方。我正在使用以下代码来调整部分图例(颜色、线型和符号的顺序):

scale_color_manual(values = c("#FF6600", "green4", "#0099FF")) +                 
  scale_linetype_manual(values=c("solid", "solid", "solid")) +  
  scale_shape_manual(values = c(16, 16, 16)) +   

这是一个与我的图表相匹配的可爱图例。但是,当我尝试使用此代码添加标题时:

labs(linetype='title')+

我在下面看到了另一个图例(因此它们同时出现在图上),标题正确,但 none 是以前的格式。显然我正在编写一个单独的图例,但我无法修复它!

此外,我想为我的图例赋予的真实标题需要 CO2 的下标“2”,我在其他标题中使用了以下内容来说明这一点:

expression(CO[2]~concentration~(ppm))  

我想我会提一下,以防万一它改变了什么。

Aaaa,当我在做的时候,我还想将图例方向更改为水平而不是垂直列表,并将其移动到绘图的一角 space(已尝试 legend.position = c(0.9, 0.8) 以前有效但在这种情况下无效)。

我的问题是,当我尝试每件新事物时,错误会越来越多,我无法继续前进。

我意识到这 post 远非优雅,但我们将不胜感激任何帮助。抱歉,我没有提供任何示例代码,我是一个 R 新手并且完全游泳。
提前致谢!

您可能太新了,无法创建可重现的示例,所以这里有一个尝试和答案:

library(ggplot2)
set.seed(100)
df1 <- subset(diamonds, cut %in% (levels(diamonds$cut)[1:3]))[sample(100),]
p <- ggplot(df1, aes(x=carat, y=price, colour=cut, shape=cut, linetype=cut, group=cut))
p <- p + geom_line() 
p + scale_color_manual(values = c("#FF6600", "green4", "#0099FF")) +                 
  scale_linetype_manual(values=c("solid", "solid", "solid")) +  
  scale_shape_manual(values = c(16, 16, 16)) +
  labs(linetype='title')

这是"ghost legend"吗?

这是一个解决方法。标题也应该放在其他美学:

p + scale_color_manual(values = c("#FF6600", "green4", "#0099FF")) +                 
  scale_linetype_manual(values=c("solid", "solid", "solid")) +  
  scale_shape_manual(values = c(16, 16, 16)) +
  labs(linetype=expression(CO[2]~concentration~(ppm)),
       colour=expression(CO[2]~concentration~(ppm)),
       shape=expression(CO[2]~concentration~(ppm)))

多余的图例消失了。发生这种情况是因为名称不同。我们重复了所有美学的名称。

一个较短的选择是将 guide="none" 添加到其他比例:

p + scale_color_manual(name=expression(CO[2]~concentration~(ppm)),
                       values = c("#FF6600", "green4", "#0099FF")) +                 
  scale_linetype_manual(guide="none",values=c("solid", "solid", "solid")) +  
  scale_shape_manual(guide="none",values = c(16, 16, 16))