用灰色和黑色虚线的折线图

4
使用ggplot2 R软件包,我制作了一个带有6条彩色线条的折线图(对应一个因子的6个水平),我想将其改为黑白图形,其中3条为黑色实线、虚线和点线,另外3条为灰色实线、虚线和点线。我尝试使用scale_linetype_manual()和scale_color_grey()函数,但是我无法混合灰色和黑色的点线。

这里是灰色选项的代码:

ggplot() + 
  geom_line(data = f[!is.na(f$fr),], aes(x=date2, y=fr, colour=locality, group=locality), 
            size = 1.0) + 
  scale_color_grey(start = 0, end = 0.9, guide="legend", name="Locality", 
                   labels=c("a","b","c","d","e","f")) + 
  xlab("") + 
  ylab("") + 
  theme_bw() +
  theme(legend.position = "top", panel.background = element_rect(fill = "white"), 
        panel.grid.major = element_line(colour = "white"), 
        axis.text.x=element_text(angle=90,hjust=1,vjust=0.5)) + 
  facet_grid(.~year)    

这里输入图片描述

以下是带虚线的代码:

ggplot() + 
  geom_line(data = f[!is.na(f$fr),], aes(x=date2, y=fr, linetype=locality, group=locality), 
            size = 1.0) + 
  scale_linetype_manual(name="Locality", 
                        values=c("solid", "dashed", "dotted", "dotdash", "longdash", "twodash"), 
                        labels=c("a","b","c","d","e","f")) +
  xlab("") + 
  ylab("") + 
  theme_bw()+ 
  theme(legend.position = "top", panel.background = element_rect(fill = "white"), 
        panel.grid.major = element_line(colour = "white"), 
        axis.text.x=element_text(angle=90,hjust=1,vjust=0.5)) +
  facet_grid(.~year)    

enter image description here

请问有没有人能帮我用一条实线的黑色线、一条虚线的黑色线、一条点线的黑色线、一条实线的灰色线等来制作这张图呢?


2
只需在您的图表中添加scale_colour_manual()函数。 - MLavoie
谢谢。我试图将它添加到最后一个代码中,但是它没有起作用... 这是输出:Error in scale$palette(n) :参数“values”缺失,没有默认值。 - Elena
你尝试过使用scale_colour_manual(values=c("black", "grey", "black", "grey", "black", "grey"))吗? - MLavoie
是的,我也尝试了“grey50”,“grey80”等,但仍然不起作用。我认为可以通过同一“scale_linetype_manual()”命令将每条线连接到其颜色,但我不知道如何操作...谢谢。 - Elena
还可以在这里查看:https://dev59.com/_eo6XIcBkEYKwwoYPSH7 - Axeman
2个回答

5

将图表中的颜色线型进行映射,并设置手动比例尺。

d <- data.frame(locality = rep(letters[1:6], each = 2),
            x = 1:2,
            y = rep(1:6, each = 2))

ggplot(d, aes(x = x, y = y,colour = locality, linetype = locality)) + 
  geom_line() +
  theme_bw() +
  scale_color_manual(name = "Locality",
                     values = c('black', 'black', 'black', 'grey', 'grey', 'grey'),
                     labels = c("a","b","c","d","e","f")) +
  scale_linetype_manual(name = "Locality", 
                        values = c("solid", "dashed", "dotted", "solid", "dashed", "dotted"), 
                        labels = c("a","b","c","d","e","f"))

enter image description here


谢谢!我尝试了一下,出现了错误:Error: Use guide="none" for suppress the guide display. (Defunct; last used in version 0.8.9)。然后我尝试在scale_color_manual()和scale_linetype_manual()中都加入guide="legend",但是还是返回相同的错误...谢谢 - Elena
这不是我的代码造成的。如果你没有提供可重现的例子,那就是问题所在。 - Axeman
抱歉,我是新手,对这个网站不是很熟悉。我更改了数据和图例,并尝试了多次,现在它可以工作了!非常感谢。 - Elena

2
如MLavoie所说,我认为您应该尝试创建明确的向量。虽然我没有尝试过,但也许像这样的东西会起作用:
vectCol=c("a"="black", "b"="black", "c"="black", "d"="grey","e"="grey", "f"="grey")
vectTyp=c("a"="solid", "b"="dashed", "c"="dotted", "d"="solid","e"="dashed", "f"="dotted")

然后,在ggplot中添加“linetype”作为参数,并使用scale_manual设置颜色和线型。

ggplot(data = f[!is.na(f$fr),], aes(x=date2, y=fr, colour=locality,group=locality, linetype=locality)) + 
geom_line(size = 1.0) + 
scale_color_manual(values=vectCol, guide="legend", name="Locality", labels=c("a","b","c","d","e","f"))+ 
scale_linetype_manual(values=vectTyp, guide="legend", name="Locality", labels=c("a","b","c","d","e","f"))+
xlab("") + ylab("") + theme_bw() + 
theme(legend.position = "top", panel.background = element_rect(fill ="white"), panel.grid.major = element_line(colour = "white"), 
    axis.text.x=element_text(angle=90,hjust=1,vjust=0.5)) + facet_grid(.~year) 

谢谢!我尝试了,但现在出现了错误:grid.Call.graphics(L_lines, x$x, x$y, index, x$arrow) 中的无效线路类型。 - Elena
好的,我的错。如果您尝试使用vectTyp=c("a"=1, "b"=2, "c"=3, "d"=1,"e"=2, "f"=3),会怎么样? - bhuss
它返回相同的错误...:grid.Call.graphics(L_lines,x$x,x$y,index,x$arrow)中的错误: 无效的线类型。 - Elena
在您的数据集f中,地区的级别是否被称为 "a"、"b"、"c" 等等?否则,您应该用正确的级别替换vectCol和vectTyp中的 a、b、c、d、e、f。例如,如果您的地区是 "伦敦"、"纽约" 等等,那么请编写vectTyp = c("伦敦"=1, "纽约"=2, 等等...)。 - bhuss
是的,我想这就是确切的问题!现在它可以工作了。我在图例名称和实际级别因子名称上犯了错误。非常感谢你。 - Elena

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