Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何调整图例属性以显示2个特征?_R_Ggplot2_Legend_Legend Properties - Fatal编程技术网

R 如何调整图例属性以显示2个特征?

R 如何调整图例属性以显示2个特征?,r,ggplot2,legend,legend-properties,R,Ggplot2,Legend,Legend Properties,我在同一个图中画了两个变量,每个变量都是按年份分组的。我的图例按年份显示颜色差异,但我不知道如何将线型添加到图例中。理想情况下,图例中有4条线:粉色=2015,蓝色=2016,虚线=Var1,实线=Var2 这是我的示例df: year <- c(2015,2015,2015,2015,2015,2015,2015,2015,2015,2015,2015,2015,2016,2016,2016,2016,2016,2016,2016,2016,2016,2016,2016,2016) mo

我在同一个图中画了两个变量,每个变量都是按年份分组的。我的图例按年份显示颜色差异,但我不知道如何将线型添加到图例中。理想情况下,图例中有4条线:粉色=2015,蓝色=2016,虚线=Var1,实线=Var2

这是我的示例df:

year <- c(2015,2015,2015,2015,2015,2015,2015,2015,2015,2015,2015,2015,2016,2016,2016,2016,2016,2016,2016,2016,2016,2016,2016,2016)
month <-c(1,2,3,4,5,6,7,8,9,10,11,12,1,2,3,4,5,6,7,8,9,10,11,12)
Var1 <- sample(30:60, 24, rep=TRUE)
Var2 <- sample(70:90, 24, rep=TRUE)
df <- data.frame(year,month,Var1, Var2)

year为此,我们必须稍微更改一下您的数据集。首先,我们将(从tidyr包中)收集您的var1和var2,这样我们就有了两个新变量,一个名为var的变量有值“var1”和“var2”,另一个名为n的变量有值var1和var2

df <- data.frame(year,month,Var1,Var2) %>%
        gather("var", "n", 3:4)
df%
聚集(“变量”,“n”,3:4)
然后,对于“年”X“var”的每个组合,我们将创建一个段变量,指示我们将绘制哪条线

  • 1年==2015年&var==var1
  • 第2年=2016年,var=var1
  • 3年==2015年&var==var2年
  • 4年=2016年和变量=2年
像这样懒洋洋地做

df$segment <- rep(1:4, each = 12)
df$段

但是图例上的蓝色和红色虚线会更好,不是吗?对于这个例子来说,这两种方式都不重要,因为你会得到4个图例元素(粉色满、粉色满、蓝色满、蓝色满),但一般来说,我们希望将每种美学单独分组。它看起来不错,但我还没有过开头,因为我得到一个错误:找不到函数“%>%”。这是我需要调用的特定包吗?哦,对不起,我忘了指出,它来自dplyr包。有没有办法创建一个响应数据本身的段变量?例如,如果我的数据发生了变化&我需要绘制3年而不是2年,我希望代码仍然有效。有了这个答案,df$段将不得不在每次时间框架更改时手动更改。
df$segment <- rep(1:4, each = 12)
gg <- ggplot()
for (i in 1:4) gg <- gg + 
  geom_line(data = subset(df, segment == i), 
            aes(x = as.factor(month), y = n, linetype = var,
                group = as.factor(year), color = as.factor(year))) +
  geom_point(data = subset(df, segment == i), 
            aes(x = as.factor(month), y = n, group = as.factor(year)))
gg <- gg + theme(legend.title = element_blank())+
    labs(x = NULL,y = "", title = "Var1 vs. Var2")+
    scale_x_discrete(expand = c(0,0.2),
                     labels = c("Jan", "Feb", "Mar", "Apr", "May", "Jun", 
                                "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"))
gg
year <-   c(2015,2015,2015,2015,2015,2015,2015,2015,2015,
2015,2015,2015,2016,2016,2016,2016,2016,2016,2016,2016,2016,2016,2016,2016)
month <-c(1,2,3,4,5,6,7,8,9,10,11,12,1,2,3,4,5,6,7,8,9,10,11,12)
Var1 <- sample(30:60, 24, rep=TRUE)
Var2 <- sample(70:90, 24, rep=TRUE)
df <- data.frame(year,month,Var1, Var2)
library(data.table)
library (ggplot2)
ggplot(melt(as.data.table(df),id.vars=c("year","month")))+   
geom_line(aes(x=as.factor(month), 
y=value, group=interaction(variable,  as.factor(year)),
color=as.factor(year),linetype=variable), size=0.9) + 
labs(x = NULL,y = "", title = "Var1 vs. Var2")+
 scale_x_discrete(expand = c(0,0.2),
                  labels = c("Jan", "Feb", "Mar", "Apr", "May", "Jun", 
                            "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"))