r - ggplot 从 csv 文件创建多线图

标签 r ggplot2

我对 ggplot(在某种程度上是 R)完全陌生。我对可以使用 ggplot 创建的图表的质量感到震惊,我正在尝试学习如何使用 ggplot 创建一个简单的多线图。

不幸的是,我还没有找到任何可以帮助我接近我正在尝试做的事情的教程:

我有一个包含以下数据的 CSV 文件:

id,f1,f2,f3,f4,f5,f6
30,0.841933670833,0.842101814883,0.842759547545,1.88961562347,1.99808377527,0.841933670833
40,1.47207692205,1.48713866811,1.48717177671,1.48729643008,1.48743226992,1.48713866811
50,0.823895293045,0.900091982861,0.900710334491,0.901274168324,0.901413662472,0.901413662472

我想绘制:

  1. X轴第一列(id)
  2. 每个后续的“列”作为线图,在线的点之间进行平滑以创建漂亮的平滑线
  3. f1、f2 ....的图例。
  4. 指定线条颜色并向 f2 列的线条图添加标记(例如十字,即“+”)(例如)。

我真的是 ggplot 的新手,所以除了将文件读入 R 之外,我真的没有其他的东西。

任何帮助我创建上述情节的帮助都将非常有教育意义,并有助于减少 ggplot 学习曲线。

最佳答案

dat <- structure(list(id = c(30L, 40L, 50L), f1 = c(0.841933670833, 
1.47207692205, 0.823895293045), f2 = c(0.842101814883, 1.48713866811, 
0.900091982861), f3 = c(0.842759547545, 1.48717177671, 0.900710334491
), f4 = c(1.88961562347, 1.48729643008, 0.901274168324), f5 = c(1.99808377527, 
1.48743226992, 0.901413662472), f6 = c(0.841933670833, 1.48713866811, 
0.901413662472)), .Names = c("id", "f1", "f2", "f3", "f4", "f5", 
"f6"), class = "data.frame", row.names = c(NA, -3L))

从这里我会使用 melt .阅读?melt.data.frame获取更多信息。但简而言之,这会将数据从“宽”格式转换为“长”格式。

library(reshape2)
dat.m <- melt(dat, id.vars='id')

> dat.m
   id variable     value
1  30       f1 0.8419337
2  40       f1 1.4720769
3  50       f1 0.8238953
4  30       f2 0.8421018
5  40       f2 1.4871387
6  50       f2 0.9000920
7  30       f3 0.8427595
8  40       f3 1.4871718
9  50       f3 0.9007103
10 30       f4 1.8896156
11 40       f4 1.4872964
12 50       f4 0.9012742
13 30       f5 1.9980838
14 40       f5 1.4874323
15 50       f5 0.9014137
16 30       f6 0.8419337
17 40       f6 1.4871387
18 50       f6 0.9014137
> 

然后随心所欲地绘制:

ggplot(dat.m, aes(x=id, y=value, colour=variable)) + 
  geom_line() +
  geom_point(data=dat.m[dat.m$variable=='f2',], cex=2)

在哪里aes定义美学,如 x 值、y 值、颜色/颜色等。然后添加“层”。在前面的示例中,我为我在 ggplot() 中定义的内容添加了一行部分与 geom_line()并用 geom_point 添加了一个点我只把它们放在 f2 上多变的。

在下面,我用 geom_smooth() 添加了一条平滑线.有关此操作的更多信息,请参阅文档,?geom_smooth .

ggplot(dat.m, aes(x=id, y=value, colour=variable)) + 
  geom_smooth() + 
  geom_point(data=dat.m[dat.m$variable=='f2',], shape=3)

或所有形状。这里我把形状放在美学中ggplot() .通过将它们放在这里,它们适用于所有连续的层,而不必每次都指定它们。但是,我可以覆盖 ggplot() 中提供的值在任何后面的层中:

ggplot(dat.m, aes(x=id, y=value, colour=variable, shape=variable)) + 
  geom_smooth() + 
  geom_point() +
  geom_point(data=dat, aes(x=id, y=f2, color='red'), size=10, shape=2)

但是,有点ggplot理解只是需要时间。完成文档中和 ggplot2 上给出的一些示例网站。如果你的经历和我一样,在与它抗争几天或几周后,它最终会成功。关于数据,如果您将数据分配给 dat ,代码不会改变。 dat <- read.csv(...) .我不使用 data作为一个变量,因为它是一个内置函数。

关于r - ggplot 从 csv 文件创建多线图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11751047/

相关文章:

r - 如何将 docx 转换为 PDF?

r - 使用 R 将列表转换为 csv 文件

r - 不要使用facet_grid显示空的facet

r - ggplot2 中 facet_wrap() 的手动中断

r - 如何调整ggplot2中默认图例中标签的顺序,使其与数据中的顺序相对应

python - 'reticulate' r-package 导入 python 脚本时出错

r - 如何在R中的一张图中放置多条时间序列线?

r - 需要重组数据

stat_poly_eq 中的 R 科学记数法

r - 在 R : Computation failed in `stat_density2d()` : bandwidths must be strictly positive 中使用 geom_密度_2d() 时出错