繁体   English   中英

如何在R中的多线图上添加图例?

[英]How to add a legend on a multiple line graph in R?

我试图在同一个图上绘制两个不同的数据集。 我正在使用此代码添加线条并实际绘制所有内容

ggplot()+
geom_point(data=Acc, aes(x=Year, y=Accumulo), color="lightskyblue")+
geom_line(data=Acc, aes(x=Year, y=RM3), color="gold1")+
geom_line(data=Acc, aes(x=Year, y=RM5), color="springgreen3")+
geom_line(data=Acc, aes(x=Year, y=RM50), color="blue")+
geom_line(data=Vulcani, aes(x=Year, y=Accumulo.V), color="red")+
theme_bw()+
scale_x_continuous(expand=expand_scale(0)) + scale_y_continuous(limits=c(50,350),expand=expand_scale(0))

但我找不到任何方法来添加图例并向不同系列添加自定义标签。 我找到了一种在单个数据集上添加图例的方法,但我找不到一种方法可以在侧面添加图例

您最好创建一个根据您的绘图需求量身定制的单个数据集,该数据集将采用长格式,以便您可以提供单个geom_line()指令,并使用aes(color = ...)为线条添加颜色在对geom_line()的调用中。 这是midwest数据集的示例(为了举例,将它们视为不同的数据集)

library(ggplot2)
library(dplyr)
library(tidyr)

long_midwest <- midwest %>% 
    select(popwhite, popasian, PID, poptotal) %>% 
    gather(key = "variable", value = "value", -PID, -poptotal) # convert to long format

long_midwest2 <- midwest %>% 
    select(poptotal, perchsd, PID) %>% 
    gather(key = "variable", value = "value", -PID, -poptotal)

plot_data <- bind_rows(long_midwest, long_midwest2) %>% # bind datasets vertically
    mutate(line_type = ifelse(variable == 'perchsd', 'A', 'B')) # creates a line_type variable

ggplot(data = plot_data, aes(x=poptotal, y = value))+
    geom_line(aes(color = variable, linetype = line_type)) +
    scale_color_manual(
        values = c('lightskyblue', 'gold1', 'blue'),
        name = "My color legend"
    ) +
    scale_linetype_manual(
        values = c(3, 1), # play with the numbers to get the correct styling
        name = "My linetype legend"
    )

在此处输入图片说明

我添加了一个line_type变量来显示最通用的情况,在这种情况下,您需要在列值和线型之间进行特定映射。 如果它与例如variable相同,只需使用aes(color = variable, linetype = variable) 然后,您可以决定所需的线型( 有关更多详细信息,请参见此处)。

要自定义标签,只需使用所需值更改数据集中variable的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM