【发布时间】:2019-10-29 12:21:53
【问题描述】:
这是我第一次在这里发帖,我希望我的问题是明确和适当的。我有一组数据,其头部如下所示:
wl ex421 wl ex309 wl ex284 wl ex347
1 431 0.6168224 321 0.1267943 301 0.06392694 361 0.15220484
2 432 0.6687435 322 0.2416268 302 0.05631659 362 0.08961593
3 433 0.6583593 323 0.4665072 303 0.05327245 363 0.13134187
4 434 0.6832814 324 0.3576555 304 0.00000000 364 0.32432432
5 435 0.6427830 325 0.2194976 305 0.12328767 365 0.50308203
6 436 0.7393562 326 0.1866029 306 0.08675799 366 0.34660977
等等。 “wl”列代表波长,有四个不同的范围。其他四列代表在“wl”范围内进行的测量(标准化)。范围也有不同的长度。所有这些都在数据集中间的某个地方部分重叠。 我需要实现的是在同一组轴上显示所有四组“ex###”数据并绘制在各自范围内的图。 x 轴需要适应所有四个“wl”范围。但是,我还没有成功。
过去,当我不得不像这样绘制多组数据时,我只是融化了数据,它总是有效的。像这样的:
df_melt <- melt(df, id.var = 'wl')
然后我会这样绘制:
fluor_plt <- ggplot(fluor_ref2_melt, aes(x=wl,y=value,color=variable)) +
geom_point(shape = 1, fill = NA) + geom_path(data = fluor_ref2_melt,size = 1) +
theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank()) +
scale_colour_manual(values = colvec)
但是,因为我有多个名为“wl”的列,它们也有不同的范围,所以发生的情况是 R 只取第一个“wl”列并丢弃所有其他列。然后它基本上通过使用行索引将所有'ex###'值转移到该范围内......所以我得到了下面的框架图:
wl ex421 ex309 ex284 ex347
1 431 0.6168224 0.1267943 0.06392694 0.15220484
2 432 0.6687435 0.2416268 0.05631659 0.08961593
3 433 0.6583593 0.4665072 0.05327245 0.13134187
4 434 0.6832814 0.3576555 0.00000000 0.32432432
5 435 0.6427830 0.2194976 0.12328767 0.50308203
6 436 0.7393562 0.1866029 0.08675799 0.34660977
不用说,这是完全错误的...... 因此,我试图规避该问题的一种方法是进入 Excel 并手动上下移动列,以便在数据框中,每一行对应一个“wl”值,无论是否有任何相关的测量值。这摆脱了被“移位”的值,但 R 在第一个之后仍然丢弃了“wl”列。我没有得到一个完全错误的情节,而是得到了正确情节的一部分。第一组观测值 (ex421) 绘制在其整个范围内;在范围重叠的地方可以看到其他部分。 我看过一些过去在这里被问到的类似案例,例如 - Reshape data frame from wide to long with re-occuring column names in R。 但我是 R 新手,我认为我不能完全理解所提出的解决方案。我没有成功地以我希望它被重塑的方式重塑我的数据(为不同的集合保持不同的 'wl' 范围),我不知道之后要给 ggplot 哪些论据。我尝试过使用 data.table,但后来我不知道为 value.name 和 variable.name 赋予什么。 重申一下,我想要实现的是通过在 Excel 中制作单个散点图并向其中添加四个不同系列来绘制电子表格中的四个数据集。
任何意见将不胜感激!
【问题讨论】: