R + ggplot:绘制许多变量

时间:2017-08-10 22:00:40

标签: r ggplot2 plotly

我想用这个数据框制作一个情节:

val = c(27.9, 35.5, 28.2, 20.7, 9.3, 7.3, 9.2, 8.8, 14.2, 13.7, 12.4, 41.3, 31.8,  
                44.0, 28.0, 17.5, 6.1, 6.9, 5.7,  9.8,  8.8, 21.9, 13.7, 26.2, 22.8,    
                21.6, 15.2, 15.2,  3.4, 2.9,  4.2,  3.3,  8.1,  9.2,  8.5, 25.8, 34.1,  
               36.6, 28.1, 10.4, 3.9, 15.8, 24.9, 19.5, 21.8, 22.2, 19.1, 22.0)
df = data.frame(variable=rep(c('E1', 'E2'), 
                each=12,2),
                value=val, 
                mes= rep(month.abb,4),
                var=rep(c('orig', 'trat'), each=24))
str(df)
    'data.frame':   48 obs. of  4 variables:
     $ variable: Factor w/ 2 levels "E1","E2": 1 1 1 1 1 1 1 1 1 1 ...
     $ value   : num  27.9 35.5 28.2 20.7 9.3 7.3 9.2 8.8 14.2 13.7 ...
     $ mes     : Factor w/ 12 levels "Apr","Aug","Dec",..: 5 4 8 1 9 7 6 2 12 11 ...
     $ var     : Factor w/ 2 levels "orig","trat": 1 1 1 1 1 1 1 1 1 

探索,我制作了这个情节:

ggplot(df, 
       aes(mes, value, group=variable, color=variable, shape=var)) + 
        scale_x_discrete(limits = month.abb) + 
        geom_point() + geom_line() + 
        theme(legend.position = 'bottom')

ggplot输出不是我的预期,但是当通过ggplotly函数时,它就变成了我的意图。

此外,如果我传递选项:...aes(mes, value, group=variable, color=variable, shape=var, linetype=var)...以便使用不同的线类型分隔两个var值,我会得到错误:错误:geom_path:如果你使用的是虚线或虚线,颜色,大小和线型必须在行上保持不变。

那么,ggplot图形会发生什么?我应该如何在ggplot函数中使用linetype属性?

修改 fausto.siegmund的答案允许我使用不同类型的行分隔var变量:

ggplot(df, 
       aes(mes, value, group=interaction(variable,var), color=variable, linetype=var)) + 
  scale_x_discrete(limits = month.abb) + 
  geom_point() + geom_line() + 
  theme(legend.position = 'bottom')

现在看起来更好。可以一瞥var两个因素。

谢谢fausto.siegmund!

1 个答案:

答案 0 :(得分:1)

要查看您需要绘制的varvariable中的因子级别组合,请运行levels(interaction(df$variable,df$var))。这表明要绘制的因素是:

"E1.orig" "E2.orig" "E1.trat" "E2.trat"

要为这些可能的组合绘制唯一的行,请将group=variable修改为group=interaction(variable,var)

完整代码和结果图。

val = c(27.9, 35.5, 28.2, 20.7, 9.3, 7.3, 9.2, 8.8, 14.2, 13.7, 12.4, 41.3, 31.8,  
                44.0, 28.0, 17.5, 6.1, 6.9, 5.7,  9.8,  8.8, 21.9, 13.7, 26.2, 22.8,    
                21.6, 15.2, 15.2,  3.4, 2.9,  4.2,  3.3,  8.1,  9.2,  8.5, 25.8, 34.1,  
               36.6, 28.1, 10.4, 3.9, 15.8, 24.9, 19.5, 21.8, 22.2, 19.1, 22.0)
df = data.frame(variable=rep(c('E1', 'E2'), 
                each=12,2),
                value=val, 
                mes= rep(month.abb,4),
                var=rep(c('orig', 'trat'), each=24))

ggplot(df, 
       aes(mes, value, group=interaction(variable,var), color=variable, shape=var)) + 
  scale_x_discrete(limits = month.abb) + 
  geom_point() + geom_line() + 
  theme(legend.position = 'bottom')

enter image description here