我一直试图绘制光谱,但我没有成功。
我所拥有的是具有超过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()
是否真的有一种很好的方法来绘制光谱?我真的很感激任何帮助
答案 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()
我得到了这样的图表:
值得一提的是,在一个地块中绘制300个不同的信号可能会使情节太复杂而无法实现高效率。