【问题标题】:add one mean trend line for different lines in one plot在一张图中为不同的线添加一条平均趋势线
【发布时间】:2013-12-05 10:49:50
【问题描述】:

我正在尝试将趋势线(线性平均值)添加到绘图中。我想在一个图中为 11 条单独的线设置一条平均趋势线。我的情节是这样的:

现在我想要一 (1) 个彩色线条的平均趋势。两条灰线是最大值和最小值,形成平均趋势线时不考虑壳。彩色线的唯一趋势线。我的数据是这样的:

jahr    beob    werex_00    werex_11    werex_22    werex_33    werex_44    werex_55    werex_66    werex_77    werex_88    werex_99    Min Max 
1961    NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  -18,6304    61,1809 
1962    NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  -11,9439    87,5546 
1963    NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  -15,5266    82,2700 
1964    NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  -40,0319    85,2906 
1965    NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  -34,3038    94,9024 
1966    -3,8771 8,3257  24,8513 13,5184 21,0853 15,6732 1,8496  -8,4903 2,1629  8,2024  16,1356 -31,3819    92,7969 
1967    -9,4982 11,3976 23,0892 13,9196 16,8335 17,2100 2,9570  -10,1167    3,9671  7,2876  10,6471 -7,5067 110,6196    
1968    -11,2913    11,4993 18,3050 8,0152  13,9073 16,8016 4,7250  -12,9246    2,6713  5,4357  3,5107  -51,2107    138,7448    
1969    2,6362  9,1087  19,9564 6,0345  3,8747  11,6780 2,5116  -13,4089    4,3353  0,3998  3,1798  -30,3322    42,1300 
1970    6,6531  2,0238  20,5422 2,3972  0,4017  11,1036 5,0465  -10,2958    8,3485  -2,1658 4,6128  -11,5068    44,3986 
1971    -1,7923 3,0214  18,7542 2,5401  -2,5444 8,3054  1,8535  -10,1233    8,3663  2,0204  1,9454  -22,3762    95,3033 
1972    -1,1383 0,1923  21,6838 -1,2288 -4,1658 4,4113  2,5008  -7,6908 9,6488  2,3338  0,7093  -29,0978    31,1931 
1973    -3,9827 2,7288  19,6430 -0,1119 -3,9149 3,1060  -3,5426 -5,1332 3,9206  1,2295  -6,9931 -30,3709    44,2175 
1974    -5,6800 -0,2600 13,2311 1,2855  -11,7234    -8,2399 -5,7620 -4,3448 8,3248  -0,5500 -5,6376 -44,4719    143,3977    
1975    -0,6020 4,4594  13,4312 1,8103  -11,7964    -11,2020    -2,9454 -0,8192 6,8733  -1,6069 -7,5460 -27,5719    46,5896 
1976    9,0707  4,0255  12,8539 0,5613  -9,0911 -14,6242    -2,0957 0,3028  4,2881  -4,2491 -1,5111 -36,0912    22,2878 
1977    6,2822  7,5568  3,2908  1,3875  -9,0588 -14,0812    -2,3505 2,0262  2,7041  -1,6706 2,6180  -13,8766    99,9908 
1978    8,9476  11,4753 -0,1546 0,4597  -7,2769 -9,6268 -0,7031 1,2291  -0,2699 -2,7092 3,2059  -19,4729    79,3319 
1979    8,9790  6,8742  -3,7599 -1,0170 -4,2174 -11,7519    -2,6872 4,4382  0,2518  -3,8938 4,6531  -39,0920    78,4498 
1980    -0,7982 5,3090  -7,1990 0,3482  0,7074  -3,8802 -1,6347 5,7365  -2,5424 -4,5144 4,2867  -43,8048    95,6593 

.....

现在我在为ggplot 使用melt() 后绘制日期。 融合将数据转换为:

Jahr    Projektion  value   
1961    beob    NA  
1962    beob    NA  
1963    beob    NA  
1964    beob    NA  
1965    beob    NA  
1966    beob    -3,877072807    
1967    beob    -9,498158353    
1968    beob    -11,29127163    
1969    beob    2,636225556 
…   …   …   
1961    werex_00    NA  
1962    werex_00    NA  
1963    werex_00    NA  
1964    werex_00    NA  
1965    werex_00    NA  
1966    werex_00    8,32566516  
1967    werex_00    11,39762871 
1968    werex_00    11,49932052 
1969    werex_00    9,108708251 
…   …   …

现在我绘制了数据(上图):

Projektionen_Farben<-c("#000000","#00EEEE","#EEAD0E","#006400","#BDB76B","#EE7600","#68228B","#8B0000","#1E90FF","#EE6363","#556B2F","#D6D6D6","#D6D6D6")
GJm11_Grundwasserneubildung_Jahr_norm_druckreif <- melt(GJm11_Grundwasserneubildung_Jahr_norm,na.rm = FALSE, id.vars="jahr")
names(GJm11_Grundwasserneubildung_Jahr_norm_druckreif)<-c("Jahr","Projektion","value")
GJm11_Grundwasserneubildung_Jahr_norm_druckreif$Jahr <- as.numeric(factor(Jahr)) 
ggplot(GJm11_Grundwasserneubildung_Jahr_norm_druckreif,aes(x=Jahr,y=value,color=Projektion,group=Projektion))+
  geom_line(size=0.8) + xlab("Jahr") + ylab("Grundwasserneubildung [mm/a]") +
  ggtitle("Grundwasserneubildung") +  theme_bw() +
  scale_x_continuous(breaks=c(1961,1980,2000,2020,2040,2060,2080,2100)) + 
  theme(axis.title=element_text(size=15,vjust = 0.3,face="bold"), title=element_text(size=15,vjust = 1.5,face="bold")) +
  scale_colour_manual(values = Projektionen_Farben) + coord_cartesian(xlim = c(1961, 2100)) + 
  geom_ribbon(data=GJm11_Grundwasserneubildung_Jahr_norm,aes(x=jahr,ymin=Min,ymax=Max),inherit.aes=FALSE,alpha=0.1,color="grey30")

那么我怎样才能得到彩色线的平均趋势线? 另外我想知道,是否有办法添加特定时间段(如 1961-2000、2021-2050 和 2071-2100)的平均趋势线,只是为了比较这段时间段的趋势?

希望有人能给我一个提示。

【问题讨论】:

    标签: r ggplot2 line trend


    【解决方案1】:

    如果您想添加趋势线,我会考虑不要将它们绘制在实际数据之上,因为您可能看不到它。相反,我会添加一个geom_smooth

     + stat_smooth( aes( y = value, x = jahr), inherit.aes = FALSE )
    

    如果您想为不同的时间段着色,您可以执行以下操作:

    GJm11_Grundwasserneubildung_Jahr_norm_druckreif$decade <- as.factor( trunc((GJm11_Grundwasserneubildung_Jahr_norm_druckreif$Jahr -1900) / 10, digits=0) )
    

    并添加

    + stat_smooth( aes( y = value, x = jahr, color= decade), inherit.aes = FALSE )
    

    改为你的情节。

    【讨论】:

    • 嗯,geom_smooth() 效果很好,但我在整个时间跨度内只有一条平均趋势线。很好,但现在我想要一条 1961-200、2021-2050 和 2071-2100 时间的趋势线。这些是 3 条具有不同系数的不同趋势线,而一条趋势线只给了我整个时间跨度的系数。有没有办法将此 geom_smooth() 功能限制为这 3 个子时间跨度?
    • @Max 您是否尝试过(如我所写)添加另一个表示不同时间跨度的因子列? stat_smooth( ... , aes( ... , color= decade) ) 应该做你想要的。
    • 我试过 GJm11_Grundwasserneubildung_Jahr_norm_druckreif$decade
    • @Max 抱歉有一个小错误,必须是as.factor( trunc((GJm11_Grundwasserneubildung_Jahr_norm_druckreif$Jahr - ... )。但是,要小心,因为我刚刚看到您使用 as.numeric( factor(...) ) 转换了 Year-Column。所以你应该计算这个转变之前的不同十年。我想你明白了吗?
    • @Max 请将建议的 EDIT 添加到您的原始问题中。如果您只想在图表中添加特定的十年,您可以将相应的数据子集放入图层,即stat_smooth( data = myDf[ myDf$decade %in% c(1,2), ], aes( ..., color = decade ), ... )
    【解决方案2】:

    你可以使用stat_summary

    last_plot() + stat_summary(fun.y=mean, geom="line")
    

    【讨论】:

    • 非常感谢,但这不是我需要的。
    猜你喜欢
    • 2015-10-24
    • 2019-03-19
    • 1970-01-01
    • 1970-01-01
    • 2016-08-06
    • 1970-01-01
    • 2020-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多