R “从包中绘图”;lomb“;在ggplot2中
我正在使用“lomb”软件包计算lomb Scargle周期图,这是一种分析生物时间序列数据的方法。如果您让包创建绘图,则它会创建绘图。但是,绘图不太好(与ggplot2绘图相比)。因此,我想用ggplot绘制结果。但是,我不知道如何访问绘制的曲线的函数 这是绘图的示例代码:R “从包中绘图”;lomb“;在ggplot2中,r,ggplot2,R,Ggplot2,我正在使用“lomb”软件包计算lomb Scargle周期图,这是一种分析生物时间序列数据的方法。如果您让包创建绘图,则它会创建绘图。但是,绘图不太好(与ggplot2绘图相比)。因此,我想用ggplot绘制结果。但是,我不知道如何访问绘制的曲线的函数 这是绘图的示例代码: TempDiff <- runif(4033, 3.0, 18) % just generate random numbers Time2 <- seq(1,4033) % Time vector Rand.L
TempDiff <- runif(4033, 3.0, 18) % just generate random numbers
Time2 <- seq(1,4033) % Time vector
Rand.LombScargle <- randlsp(repeats=10, TempDiff, times = Time2, from = 12, to = 36,
type = c("period"), ofac = 10, alpha = 0.01, plot = T,
trace = T, xlab="period", main = "Lomb-Scargle Periodogram")
TempDiff从任何返回对象中获取ggplot
图形的关键是将所需的数据转换为某种类型的data.frame
。为此,您可以查看返回值是什么类型的对象,并查看可以立即将什么类型的数据提取到data.frame
str(Rand.LombScargle) # get the data type and structure of the returned value
List of 12
$ scanned : num [1:2241] 12 12 12 12 12 ...
$ power : num [1:2241] 0.759 0.645 0.498 0.341 0.198 ...
$ data : chr [1:2] "times" "x"
$ n : int 4033
$ type : chr "period"
$ ofac : num 10
$ n.out : int 2241
$ peak : num 7.25
$ peak.at : num [1:2] 24.6908 0.0405
$ random.peaks: num [1:10] 4.99 9.82 7.03 7.41 5.91 ...
$ repeats : num 10
$ p.value : num 0.3
- attr(*, "class")= chr "randlsp"
对于randlsp
,它是一个列表,通常是从统计函数返回的。大部分信息也可以从?randlsp
获得
看起来好像Rand.lombsargle$scanned
和Rand.lombsargle$power
包含了第一个图形所需的大部分内容:
周期图上还有一条水平线,但它与randlsp
返回的任何内容都不对应。查看您提供的源代码,周期图似乎实际上是由lsp()
生成的
对于直方图,它看起来是基于向量Rand.lombsargle$random.peaks
fromrandlsp
:
lomb.df <- data.frame(period=LombScargle$scanned, power=LombScargle$power)
# use the data frame to set up the line plot
g <- ggplot(lomb.df, aes(period, power)) + geom_line() +
labs(y="normalised power", title="Lomb-Scargle Periodogram")
# add the sig.level horizontal line
g + geom_hline(yintercept=LombScargle$sig.level, linetype="dashed")
rpeaks.df <- data.frame(peaks=Rand.LombScargle$random.peaks)
ggplot(rpeaks.df, aes(peaks)) +
geom_histogram(binwidth=1, fill="white", colour="black") +
geom_vline(xintercept=Rand.LombScargle$peak, linetype="dashed") +
xlim(c(0,12)) +
labs(title=paste0("P-value: ", Rand.LombScargle$p.value),
x="Peak Amplitude",
y="Frequency")
rpeaks.df完美,非常感谢!你的解决方案真的帮助我理解了我如何解决这个问题,并为我提供了我将来能够用来解决这类问题的能力。为了它的价值,我认为Lomb-Scarge周期图最初是在天体物理学中开发的(见Press et al.Numerical Recipes)
lomb.df <- data.frame(period=LombScargle$scanned, power=LombScargle$power)
# use the data frame to set up the line plot
g <- ggplot(lomb.df, aes(period, power)) + geom_line() +
labs(y="normalised power", title="Lomb-Scargle Periodogram")
# add the sig.level horizontal line
g + geom_hline(yintercept=LombScargle$sig.level, linetype="dashed")
rpeaks.df <- data.frame(peaks=Rand.LombScargle$random.peaks)
ggplot(rpeaks.df, aes(peaks)) +
geom_histogram(binwidth=1, fill="white", colour="black") +
geom_vline(xintercept=Rand.LombScargle$peak, linetype="dashed") +
xlim(c(0,12)) +
labs(title=paste0("P-value: ", Rand.LombScargle$p.value),
x="Peak Amplitude",
y="Frequency")