【问题标题】:How to plot several line plots in one如何在一个中绘制多个线图
【发布时间】:2014-12-27 13:45:23
【问题描述】:

我想使用 R (ggplot2) 绘制我的图形。我想要一个像图 2 那样的折线图。

这里是我的数据:

B50K,B50K+1000C50K,B50K+2000C50K,B50K+4000C50K,B50K+8000C50K,gen,xaxile
0.3795,0.4192,0.4675,0.5357,0.6217,T18-Yield,B50K
0.3178,0.3758,0.4249,0.5010,0.5870,T20-Yield,B50K+1000C50K
0.2795,0.3266,0.3763,0.4636,0.5583,T21-Yield,B50K+2000C50K
0.2417,0.2599,0.2898,0.3291,0.3736,T18-Fertility,B50K+4000C50K
0.2002,0.2287,0.2531,0.2962,0.3485,T19-Fertility,B50K+8000C50K
0.1642,0.1911,0.2151,0.2544,0.2951,T20-Fertility

***--> 分隔符是“,”。顺便说一句,我没有任何有用的 .r 脚本会有所帮助或有用。

插图显示了我在 Microsoft Word 中的数字。

我通过互联网尝试了几个脚本,但没有一个不起作用。

请您帮我制作一个 .r 脚本来读取我的数据文件(如 img1)并绘制我的数据(如图所示)。

【问题讨论】:

  • 您是否有机会编辑您的问题以将您的数据文件粘贴为 text 而不是图像链接?或者更好的是,发布一个完整的可重现示例?
  • 共享数据的一种方法是使用dput。要给出数据的前 20 行,您将发布 dput(yourdata[1:20, ]) 的结果。如果您还可以共享您尝试创建绘图的代码,那就太好了。谢谢
  • 亲爱的 Ben 和 user20650,我的帖子是通过导入我的数据和用“,”替换制表符分隔符来编辑的。任何帮助将不胜感激。
  • 为什么数据的最后一行比其他行少一个元素?
  • 因为第六列的元素是五个。其实第六列就是图中的x轴。除表头外,前3行为实线(R图中应为实线),第4、5、6行为上图中的虚线(R图中应为虚线)。

标签: r ggplot2 linegraph


【解决方案1】:

诀窍是重塑您的数据(使用reshape2 包中的melt),以便您可以轻松地将颜色和线型映射到gen

# Your data - note i also added an extra comma after the fifth column in row 6.
# It would be easier if you gave data using dput as described in comments above - thanks
dat <- read.table(text="B50K,B50K+1000C50K,B50K+2000C50K,B50K+4000C50K,B50K+8000C50K,xaxile,gen
0.3795,0.4192,0.4675,0.5357,0.6217,B50K,T18-Yield
0.3178,0.3758,0.4249,0.5010,0.5870,B50K+1000C50K,T20-Yield
0.2795,0.3266,0.3763,0.4636,0.5583,B50K+2000C50K,T21-Yield
0.2417,0.2599,0.2898,0.3291,0.3736,B50K+4000C50K,T18-Fertility
0.2002,0.2287,0.2531,0.2962,0.3485,B50K+8000C50K,T19-Fertility
0.1642,0.1911,0.2151,0.2544,0.2951,,T20-Fertility", 
header=T, sep=",", na.strings="")

# load the pckages you need
library(ggplot2)
library(reshape2)

# assume xaxile column is unneeded? - did you add this column yourself? 
dat$xaxile <- NULL

# reshape data for plotting
dat.m <- melt(dat)

# plot
ggplot(dat.m, aes(x=variable, y=value, colour=gen, 
                  shape=gen, linetype=gen, group=gen)) +
                  geom_point() + 
                  geom_line() 

然后您可以使用scale_linetype_manualscale_shape_manual 手动指定您希望绘图的外观。 This post 会有所帮助,但还有很多其他方法

【讨论】:

  • 感谢用户 20650。太棒了,您节省了一天!和我想要的图一模一样。一个问题:图中“gen”元素的顺序与数据集不同。我们可以把它保留为图中的数据集吗?
  • 不客气。查看genfactor 级别的排序; levels(dat.m$gen)。您使用?factor 命令更改顺序,即在绘制之前执行dat.m$gen &lt;- factor(dat.m$gen, levels=unique(dat$gen), labels=unique(dat$gen)) 以获得它们在原始数据中出现的顺序。 (请注意,您可以手动输入级别和标签 - 我会这样做,因为它更安全、更透明)
  • @user1677032 如果答案对您有用,如果您接受答案,我们将不胜感激。这将为未来的读者提供有关解决方案价值的线索。另请参阅此帮助页面:What should I do when someone answers my question?
  • 再次感谢,但基于上述脚本:如何删除图例标题?以及如何将 $xaxile 保留在 x axix 中。因为,例如,在图中 B50K+1000C50K 显示为 B50K.1000C50K。事实上,“+”已改为点。此外,在 dput(dat) 命令中,“+”号被更改为“.”。
  • (1) 添加scale_shape_discrete(name="")+ scale_colour_discrete(name="")+ scale_linetype_discrete(name="")(或在您可以选择的任何scale_colour_manual()(等)规范中使用name=""可能是一种不那么笨重的方式这样做)(2)在使用read.table()read.csv()将数据导入R时指定check.names=FALSE
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-14
  • 1970-01-01
  • 2019-10-31
  • 2013-08-01
  • 1970-01-01
  • 2016-07-01
相关资源
最近更新 更多