如何在不使用任何包的情况下绘制光谱?

时间:2015-05-26 15:17:25

标签: r graphics

我一直试图绘制光谱,但我没有成功。

我所拥有的是具有超过300列和10000行(包含300个不同信号的强度信息)的文件和具有1列和10000行(其包含对应于300个信号的强度水平的波长测量值)的另一数据。我想根据波长数据绘制所有300列强度数据,

我查了一下 Plotting multiple spectra with different colors in a hyperSpec object

但它没有多大帮助,我尝试模拟可用于解释的数据

Its <- matrix(rexp(200, rate=0.1),nrow=10000,ncol=300)
Wls <- 1:10000

我试着把它们放在一起

df <- cbind(Wls,Its) 

然后我融化它以便根据之前评论的内容使用ggplot,

library(reshape2)
library(ggplot2)
melted data <- melt(df,id.vars = 'V1')
ggplot(melted) + 
  aes(x=df, y=value, group=variable, color=variable) + 
  geom_line()

是否真的有一种很好的方法来绘制光谱?我真的很感激任何帮助

1 个答案:

答案 0 :(得分:1)

这是一种可能的解决方案。 我在这里发布了一个较小的示例,但只需稍作修改即可使其适用于您的数据集。

library(reshape2)
library(ggplot2)

# Generate artificial data
Its <- matrix(sapply(1:30, function(N) {
    100 * dcauchy(x = c(scale(1:1000, scale = 1000)), 
                  location = dnorm(rnorm(1))/2, 
                  scale = 0.4+0.5*(N-1)/29, 
                  log = F)
  }), ncol = 30) # Intensities data-set
Wls <- 100:1100  # Wavelengths data-set

# Combine the relevant data and process it for plotting; replace "Wls", "Its" with your data-sets.
Full.Set <- data.frame(cbind(Wls, Its))
colnames(Full.Set) <- c("Wavelength", paste0("Sig.", 1:30)) # change 30 to the number of columns 
                                                            # in your intensity data-set.
Melted.Set <- melt(Full.Set, id.vars = "Wavelength")

# Plot 
ggplot(Melted.Set, 
       aes(x = Wavelength, y = value, color = variable)) + 
  geom_line()

我得到了这样的图表:

Spectra for artificially generated data, doesn't necessarily correspond to a real phenomenon

值得一提的是,在一个地块中绘制300个不同的信号可能会使情节太复杂而无法实现高效率。