【问题标题】:Labelling lines in ggplot2 with their gradients and changing legend characteristics在 ggplot2 中用渐变和变化的图例特征标记线条
【发布时间】:2013-06-15 13:02:01
【问题描述】:

我正在使用以下数据查看 1954 年至 2000 年每月最高温度的变化:

http://pastebin.com/37zUkaA4

为了清楚起见,我决定只在图表上绘制每个月的 abline。我的代码如下:

OxTemp$Month <- factor(OxTemp$Month, levels=c("January", "February", "March","April", "May", "June", "August", "September", "October", "November", "December"), ordered=TRUE)

p<-ggplot(OxTemp, aes(x=Year, y=MaxT, group=Month, colour=Season, linetype=Month))

p+geom_smooth(method = 'lm',size = 1, se = F)

这给了我以下情节:

我想知道是否有办法:

a) 更改“月份”图例中的颜色以匹配“季节”图例中的颜色

b) 使图例更宽一些,以便线型更明显

c) 在绘图中添加每条线的梯度标签,以便在每条线的右侧显示斜率值

非常感谢!

【问题讨论】:

  • 没关系。你现在知道下一次了。试一试。让我们清理 cmets
  • 我已将链接编辑到问题中。
  • 您可以添加theme(legend.key.width = unit(4, "cm")) 以使图例中的线条更大。我认为获得“月份”的颜色并不容易,因为您已经在“季节”中使用了颜色美学。

标签: r ggplot2


【解决方案1】:
OxTemp <- read.table("http://pastebin.com/raw.php?i=37zUkaA4",header=TRUE,stringsAsFactors=FALSE)

library(ggplot2)
OxTemp$Month <- factor(OxTemp$Month, 
                       levels=c("Jan", "Feb", "Mar","Apr", "May", "Jun","Jul", "Aug", "Sep", "Oct", "Nov", "Dec"), ordered=TRUE)
OxTemp$Season <- factor(OxTemp$Season, 
                       levels=c("Spring", "Summer", "Autumn", "Winter"), ordered=TRUE)

library(plyr)
slopedat <- ddply(OxTemp,.(Month),function(df) data.frame(slope=format(signif(coef(lm(MaxT~Year,data=df))[2],2),scientific=-2),
                                                          y=max(predict(lm(MaxT~Year,data=df)))))



p <- ggplot(OxTemp, aes(x=Year, y=MaxT)) + 
  geom_smooth(aes(group=Month, colour=Season, linetype=Month),method = 'lm',size = 1, se = F) +
  scale_colour_manual(values=c("Winter"= 4, "Spring" = 1, "Summer" = 2,"Autumn" = 3)) +
  geom_text(data=slopedat,aes(x=2005,y=y,label=paste0("slope = ",slope))) +
  scale_x_continuous(limits=c(1950, 2010)) +
  guides(linetype=guide_legend(override.aes=list(colour=c("Jan"= 4, "Feb" = 4, "Mar" = 1,
                                                          "Apr" = 1, "May" = 1, "Jun" = 2,
                                                          "Jul" = 2, "Aug" = 2, "Sep" = 3, 
                                                          "Oct" = 3, "Nov" = 3, "Dec" = 4)),keywidth=5))

print(p)

【讨论】:

  • 我可以再问一个简短的问题吗?我为 Min Temp 数据(也在 pastebin 链接中)绘制了相同的图表,然后为两者的平均值绘制了相同的图表,但一些斜率标签重叠。有什么工具可以移动它们吗?谢谢:-)
  • 好吧,您需要为slopedat$y 找到更好的估计器。您也可以手动定义坐标。也可以使用position_dodge
  • 谢谢罗兰。位置闪避似乎没有任何区别。请问如何为每个坡度一一指定坐标?
  • 只需将slopedat$y 更改为适合您需要的值。
猜你喜欢
  • 2022-01-04
  • 2014-08-07
  • 2017-07-22
  • 1970-01-01
  • 1970-01-01
  • 2017-10-01
  • 1970-01-01
  • 2018-04-19
  • 1970-01-01
相关资源
最近更新 更多