在GGPLOT2中为Barplot添加唯一趋势线

时间:2011-08-30 15:16:28

标签: r ggplot2

这部分与我昨天的question有关。

所以这里是数据和ggplot2中创建的图。

df = data.frame(date=c(rep(2008:2013, by=1)),
                value=c(303,407,538,696,881,1094))


ggplot(df, aes(date, value, width=0.64)) + 
        geom_bar(stat = "identity", fill="#336699", colour="black") +
        ylim(c(0,1400)) + opts(title="U.S. Smartphone Users") +
        opts(axis.text.y=theme_text(family="sans", face="bold")) +
        opts(axis.text.x=theme_text(family="sans", face="bold")) +
        opts(plot.title = theme_text(size=14, face="bold")) +
        xlab("Year") + ylab("Users (in millions)") +        
        opts(axis.title.x=theme_text(family="sans")) +
        opts(axis.title.y=theme_text(family="sans", angle=90)) +
        geom_segment(aes(x=2007.6, xend=2013, y=550, yend=1350), arrow=arrow(length=unit(0.4,"cm")))

是否可以使用ggplot2

在下图中生成squigly趋势线

我在R中创建了剧情,然后在Adobe Photoshop中制作了它,我想知道是否可以直接在R中产生那种波浪形的趋势线。

如果在ggplot2中无法做到这一点,是否有任何特定的R包适合这项任务?

我不是要求复制图表。那不是问题。只是产生趋势线似乎是一个问题。

enter image description here

2 个答案:

答案 0 :(得分:8)

根据所有评论:波浪线在科学上是可疑的,因为它不是基于数据的统计模型。 (而且它似乎显示智能手机用户的数量趋于平稳,当数据显示没有这样的事情。)所以最好的建议是“不要这样做”。

因为你似乎非常热衷于这个想法,是的,这是可能的。

您可以使用geom_line添加任何您喜欢的行。要在信息图中复制愚蠢的线条,您可以做一条直线加上一条正弦曲线,让它摆动。假设您的情节名为p

p + geom_line(
  aes(date, value), 
  data = data.frame(
    date = seq(2008, 2013, length.out = n),
    value = seq(600, 1300, length.out = n) + 100 * sin(seq(0, 4 * pi, length.out = n))  
  ), 
  arrow = arrow(length = unit(0.4, "cm"))
)

更好的方法是使用黄土平滑曲线。

p + geom_smooth(method = "loess", se = FALSE)  #maybe also span = 0.5, for extra wigglyness.

答案 1 :(得分:3)

你的问题的答案显然是:不要用R做这个.R没有针对此进行优化。如果你使用一些矢量图形程序,你会更快,更接近你想要的。使用Illustrator,Inkscape(免费)或您喜欢的任何图形工具。也许您还想在R中创建图形,稍后在其中一个程序中对其进行修改。

我可以理解这些评论并同意该图表未通过某些测试。不仅是学术测试,还包括九十年代的外观和感觉测试。对Edward Tufte的提及也是出于美学原因。但是我认为这是一个合法的问题,不值得投票只是因为图表看起来很难看。有时学者也需要将他们的东西发布在学术期刊和图形之外,最终由编辑为大众编辑。所以提前知道 - 最好不要尝试用R做这些东西可能值得注意。