在 hyperSpec 对象中绘制具有不同颜色的多个光谱

Posted

技术标签:

【中文标题】在 hyperSpec 对象中绘制具有不同颜色的多个光谱【英文标题】:Plotting multiple spectra with different colors in a hyperSpec object 【发布时间】:2015-01-10 17:08:50 【问题描述】:

我试图在同一个图上绘制多个光谱,每个光谱具有不同的颜色。 我使用来自 hyperSpec 包和 ggplot2 的“hyperSpec”对象。 我的数据集很大,但其中一部分看起来像这样:

> dataTable
     1_6-5p.asc 1_6-25p.asc 1_6-50p.asc 1_6-75p.asc 1_6-95p.asc
4000   98.35901    97.04647    98.65234    99.17536    97.11173
3999   98.35578    97.04401    98.65169    99.17371    97.11437
3998   98.35255    97.03779    98.65102    99.17253    97.11699
3997   98.34935    97.03048    98.65038    99.17188    97.12239
3996   98.34452    97.02479    98.64652    99.17108    97.12877
3995   98.33943    97.02187    98.64160    99.16943    97.13389
3994   98.33523    97.02140    98.63806    99.16646    97.13641
3993   98.33336    97.02289    98.63696    99.16242    97.13630
3992   98.33389    97.02617    98.63755    99.15876    97.13475
3991   98.33560    97.03071    98.63850    99.15775    97.13349
3990   98.33731    97.03488    98.63908    99.16082    97.13384
3989   98.33895    97.03685    98.63897    99.16680    97.13568
3988   98.34147    97.03625    98.63773    99.17248    97.13708
3987   98.34556    97.03472    98.63520    99.17517    97.13553
3986   98.35042    97.03425    98.63230    99.17450    97.13028
3985   98.35414    97.03502    98.63068    99.17167    97.12378
3984   98.35526    97.03520    98.63142    99.16771    97.12050
3983   98.35411    97.03351    98.63443    99.16319    97.12381
3982   98.35249    97.03137    98.63891    99.15940    97.13368
3981   98.35214    97.03208    98.64386    99.15863    97.14675

我的绘图代码:

> spc <- new('hyperSpec',dataTable)
> p <- qplotspc(spc)
> p <- p + scale_x_reverse()
> print(p)

我尝试添加一个带有自定义颜色的 scale_x_manual 但我无法让它工作,我对 ggplot 还很陌生。

请帮忙,谢谢!!!

【问题讨论】:

看起来hyperSpec 将每一行视为一个单独的光谱,而不是每一列。对吗? 没错,我也尝试过使用 ggplot() 而不将表格转换为“hyperSpec”对象,每个光谱都有单独的 geom_line() ,但这也会产生相同的输出,我仍然可以'不添加颜色 【参考方案1】:

让我们尝试直接使用ggplot2,因为这会给我们最大的灵活性:

library(ggplot2)
library(reshape2) # For melt function

# Turn rownames into a data column
dataTable$x = as.numeric(rownames(dataTable))

# melt using x (the former rownames) as the ID variable
dataTable.m = melt(dataTable, id.var="x")

ggplot(dataTable.m, aes(x, value, colour=variable, group=variable)) +
  geom_line() + geom_point() +
  scale_x_reverse()

colour 告诉ggplotvariable(这是光谱标识符)的每个值一个单独的颜色。 group 告诉ggplot 每个光谱应该被绘制成一条单独的线。您可以进行更多自定义,但这是基本思想。

【讨论】:

感谢您的回答,但我正在寻找 x 轴并切换图例,因此在同一个图上会有五个文件名作为 5 个不同的线图,而 x-轴将是 4000,3999,3998,3997 等。 我收到警告消息Warning message: In dataTable$x = as.numeric(rownames(dataTable)) : Coercing LHS to a list 以及Error in eval(expr, envir, enclos) : object 'x' not found 对不起,没关系,我有 dataTable 作为矩阵。我不得不将dataTable 更改为数据框,然后它就可以完美运行了。谢谢!!!

以上是关于在 hyperSpec 对象中绘制具有不同颜色的多个光谱的主要内容,如果未能解决你的问题,请参考以下文章

绘制条中具有不同颜色的 NSProgressIndicator

如何为具有不同颜色的每一行绘制某个 DataFrame 的切片?

相对于变量的模态绘制具有不同颜色的 geom_vlines

如何在WPF中绘制具有背景颜色的矩形

如何自定义 MKPolyLineView 绘制不同风格的线条

在相同的绘图空间上绘制两个 Seaborn sns.kdeplot 图形,但每个图形都有一个具有相同范围的不同颜色条