R “从包中绘图”;lomb“;在ggplot2中

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

我正在使用“lomb”软件包计算lomb Scargle周期图,这是一种分析生物时间序列数据的方法。如果您让包创建绘图,则它会创建绘图。但是,绘图不太好(与ggplot2绘图相比)。因此,我想用ggplot绘制结果。但是,我不知道如何访问绘制的曲线的函数

这是绘图的示例代码:

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
from
randlsp

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")