使用R在一个图表上绘制多条线段

6
如何在一个图表上重复这种图形样式,最好能够附带类似下面的图例,并且包含多个绘图。我尝试过"facet"的概念,但是ggplot2和trellis:xyplot都认为facets是单独的面板而不是重叠的绘图。我可以使用普通的plot()和line()来完成,但我想在ggplot2中得到多条线的图表。以下是一些长格式示例数据(使用一个名为“Graphclick”的巧妙应用程序从图表中捕获)。
comp <- read.table(pipe("pbpaste"), header=T, sep=',')

company, year, sales
Apple,1975.003,17298.457
Apple,1977.302,16784.502
Apple,1978.314,17298.457
Apple,1980.246,20730.098
Apple,1981.533,27608.426
Apple,1984.293,40862.852
Apple,1986.408,50468.617
Apple,1987.328,48236.188
Apple,1988.892,35676.547
Apple,1989.904,34616.582
Apple,1991.192,44732.742
Apple,1992.387,44732.742
Apple,1993.399,39055.324
Apple,1995.791,37894.922
Apple,1996.895,39648.746
Apple,1998.274,52804.367
Apple,1999.378,61399.512
Apple,2001.770,2.350e5
Apple,2005.265,7.735e5
Toshiba,1999.378,86856.6
Toshiba,2001.862,1.192e5
Toshiba,2004.069,1.495e5
Toshiba,2004.069,1.495e5
IBM,1975.003,22019.092
IBM,1975.830,27195.193
IBM,1976.934,30682.320
IBM,1978.130,31148.527
IBM,1980.430,35676.547
IBM,1981.625,35676.547
IBM,1983.005,39648.746
IBM,1985.305,40862.852
IBM,1986.408,46102.508
IBM,1987.512,64241.156
IBM,1989.996,75832.898
IBM,1991.100,84276.039
IBM,1992.295,85556.641
IBM,1993.307,79342.539
IBM,1994.779,79342.539
IBM,1995.791,84276.039
IBM,1996.895,95082.484
IBM,1996.895,95082.484
Commodore,1975.003,33588.051
Commodore,1975.830,34616.582
Commodore,1977.118,25219.982
Commodore,1978.130,23388.229
Commodore,1979.326,25992.234
Commodore,1980.521,21689.514
Commodore,1981.717,25219.982
Commodore,1984.201,6999.029
Commodore,1985.213,1670.460
Commodore,1986.408,1458.447

随时间计算
(来源: asymco.com)


抱歉,我不明白问题出在哪里。你为什么要使用facets?我没有看到你试图复制的图表中有任何facets或panels。提供示例代码和数据会很有帮助。 - Luciano Selzer
3
只有在你明确告诉ggplot2时,它才会创建分面。你可能只想在代码中省略任何与分面有关的引用,并将group美学设置为“计算机制造商”变量,以使用geom_line。但总的来说,如果没有发布数据和代码,我不明白你如何期望获得合适的帮助。 - joran
数据已添加。可以使用组美学和geom_Line获取多个图形。谢谢!ggplot(data=comp, aes(year, sales, group = company)) + geom_line() 现在只需要对数Y轴,每个图的颜色和图上的标签。 - tim
嗨@tim,你能分享剩下的数据吗?或者提供一个链接让我找到它吗?谢谢! - user3062149
抱歉 @user3062148,我不记得这个样本来自哪里了。 - tim
2个回答

8

如果你想要更多的控制权,你可以使用低级别的plot和lines命令。使用“plot”生成第一个图表(包括标题、x轴限制和y轴限制),然后使用“lines”向该图表添加线条。

plot(0,type="n", xlim=c(0,10), ylim=c(0,10), xlab="X Label", ylab="Y Label", main="Title")

接下来使用 lines 命令添加行:

lines(1:10, 1:10, type="l", lty=2)
lines(2:4, 10:8, col=2, type="l")
lines(6:9, c(5,6,5,6), col=3, type="l")

您可以使用“par”帮助文件(“?par”)中列出的所有参数,来微调外观。 命令输出

谢谢Jeff!我有一个类似于这样的解决方案,使用plot...也许这是继续进行的最简单和最好的方法 :-) - tim

5

因此,在ggplot2中,这段代码可以正常工作

qplot(year, sales, data=comp, colour=as.factor(company), group= company, geom="path", log="y")

现在唯一需要做的就是将Y轴上的值格式化为数字(而非科学计数法),并且标签位于图例之外,而不是在图中...欢迎提出最终建议。
最终结果比plot() + lines()更容易实现,因为它需要支持代码来获取范围、迭代组级别等。 image

如果这是一条评论,我建议您将其附加到您的问题中(并删除此答案)。如果这是一个(明确的)答案,您可以通过点击答案分数下面的复选标记来接受它。 - Roman Luštrik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接