ggplot图例中的虚线

3
我想设置图例的线型。
我的数据如下:
  VisitMonth VisitYear CaixaForum MNAC   FirstDay
  1:         01      2007         NA 7125 2007-01-01
  2:         02      2007         NA 5345 2007-02-01
  3:         03      2007         NA 4996 2007-03-01
  4:         04      2007         NA 5476 2007-04-01
  5:         05      2007         NA 6160 2007-05-01
 ---                                                
 98:         02      2015      17903 2360 2015-02-01
 99:         03      2015      30400 2930 2015-03-01
100:         04      2015      25422 3088 2015-04-01
101:         05      2015      10787 2130 2015-05-01
102:         06      2015       3679 2047 2015-06-01

我想绘制CaixaForum和MNAC栏的时间序列图。我编写了以下代码:
ggplot(data = MUSEUMS, aes(x = FirstDay, y = MNAC)) + 
  geom_line(size=0.75, aes(x = FirstDay, y = MNAC, colour = "MNAC")) + 
  geom_line(size=0.75, aes(y = CaixaForum, colour = "CaixaForum"), linetype = "dashed") + 
  labs(title = "", x = "", y = "Monthly Visitors") +  theme_bw() + 
  theme(legend.title = element_text(size=16, face="bold"),  legend.direction = "horizontal",
        legend.position=c(0.5, 1.05), text = element_text(size=20)) + 
  scale_colour_manual(name="Legend",values=c(MNAC="black", CaixaForum="black")) 

正文:
如你所见,你无法在图例中区分这两种线型: enter image description here 我该怎么解决?
我在stackoverflow上看到了其他答案,但它们并没有起作用。

你可以使用 reshape2 包中的 melt 函数将数据转换为长格式。你会得到两列,一列是 variable,另一列是 value。然后你需要将美学参数更改为 y=valuelinetype=variable - drmariod
@drmariod... 如果他们也想在图例中显示,那么你可能也是指 linetype = variable - joran
1
你所忽略的更大的画面是,当你在aes()中将美学映射到数据变量时,图例中会出现这些内容。 - joran
是的,我关注的是颜色,而不是线型...现在已经更改并提供了一个示例。 - drmariod
3个回答

7

你可以将两个点图层中的 color 属性替换为 linetype,因为在你的图形中并未实际使用 color

替换后的代码如下:

ggplot(data = MUSEUMS, aes(x = FirstDay, y = MNAC)) + 
    geom_line(size=0.75, aes(x = FirstDay, y = MNAC, linetype = "MNAC")) + 
    geom_line(size=0.75, aes(y = CaixaForum, linetype = "CaixaForum")) + 
    labs(title = "", x = "", y = "Monthly Visitors") +  theme_bw() + 
    theme(legend.title = element_text(size=16, face="bold"),  legend.direction = "horizontal",
            legend.position=c(0.5, 1.05), text = element_text(size=20)) + 
    scale_linetype_manual(name="Legend",values=c(MNAC="solid", CaixaForum="dashed")) 

如果您出于某种原因确实想要使用当前的方法,您可以通过在图形中添加以下行来通过guide_legend中的override.aes获取所需的行:

guides(color = guide_legend(override.aes = list(linetype = c("solid", "dashed"))))

1
我遇到了同样的问题。我认为这与图例线条太小而无法显示虚线有关。添加以下内容:
theme(legend.key.size=unit(3,"lines"))

为我修复了它。


0

我创建了一些随机数据来展示解决方案...

library(reshape2)
df <- data.frame(a=rnorm(10), b=rnorm(10), x=1:10, other_data=rnorm(10))
mdf <- melt(df, id.vars='x', measure.vars=c('a','b'))
ggplot(mdf, aes(x, value, linetype=variable)) + geom_line()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接