[英]R levelplot adjust axes
我想使用“ lattice”軟件包的levelplot函數將概率分布函數(PDF)繪制為R中的熱圖。 我將PDF實現為函數,然后使用兩個用於值范圍和外部函數的向量為水平圖生成矩陣。 我希望軸顯示“我的問題”是我無法在顯示兩個實際值范圍而不是分別顯示列數或行數的兩個軸上添加適當間隔的刻度線。
# PDF to plot heatmap
P_RCAconst <- function(x,tt,D)
{
1/sqrt(2*pi*D*tt)*1/x*exp(-(log(x) - 0.5*D*tt)^2/(2*D*tt))
}
# value ranges & computation of matrix to plot
tt_log <- seq(-3,3,0.05)
tt <- exp(tt_log)
tt <- c(0,tt)
x <- seq(0,8,0.05)
z <- outer(x,tt,P_RCAconst, D=1.0)
z[,1] <- 0
z[which(x == 1),1] <- 1.5
z[1,] <- 0.1
# plot heatmap using levelplot
require("lattice")
colnames(z) <- round(tt, 2)
rownames(z) <- x
levelplot(z, cex.axis=1.5, cex.lab=1.5, col.regions=colorRampPalette(c("blue", "yellow","red", "black")), at=seq(0,1.9,length=200), xlab="x", ylab="time t", main="PDF P(x,t)")
在不給列和行分配名稱的情況下,我收到以下圖,其中的刻度線是自然隔開的(與其他R函數一起使用),但值是行號和列號:
通過為列和行分配名稱,我收到以下圖,其中的刻度線完全不可讀,但至少對應於實際值:
我已經在這個看似微不足道的問題上花費了太多時間,因此,非常感謝您的幫助!
也許這個基本的例子會有所幫助,
d = data.frame(x=rep(seq(0, 10, length=nrow(volcano)), ncol(volcano)),
y=rep(seq(0, 100, length=ncol(volcano)), each=nrow(volcano)),
z=c(volcano))
library(lattice)
# let lattice pick pretty tick positions
levelplot(z~x*y, data=d)
# specific tick positions and labels
levelplot(z~x*y, data=d, scales=list(x=list(at=c(2, 5, 7, 9),
labels=letters[1:4])))
# log scale
levelplot(z~x*y, data=d, scales=list(y=list(log=TRUE)))
所有這些都在?xyplot
了描述,盡管可以承認,這是一長篇文檔。
這是我最終如何使用levelplot
和data.frame
對象(根據baptiste提供的解決方案)實現函數P(x,t)的熱圖圖的方式:
# PDF to plot heatmap
P_RCAconst <- function(xx,tt,D)
{
1/sqrt(2*pi*D*tt)*1/xx*exp(-(log(xx) - 0.5*D*tt)^2/(2*D*tt))
}
# value ranges & computation of matrix to plot
tt_end <- 20 # set end time
xx_end <- 8 # set spatial boundary
tt <- seq(0,tt_end,0.01) # variable for time
xx <- seq(0,xx_end,0.01) # spatial variable
zz <- outer(xx,tt,P_RCAconst, D=1.0) # meshgrid for P(x,t)
zz[,1] <- 0 # set initial condition
zz[which(xx == 1),1] <- 4.0 # set another initial condition
zz[1,] <- 0.1 # set boundary condition
# plot heatmap using levelplot
setwd("/Users/...") # set working dirctory
png(filename="heatmapfile.png", width=500, height=500) #or: x11()
par(oma=c(0,1.0,0,0)) # set outer margins
require("lattice") # load package "lattice"
d = data.frame(x=rep(seq(0, xx_end, length=nrow(zz)), ncol(zz)),
y=rep(seq(0, tt_end, length=ncol(zz)), each=nrow(zz)),
z=c(zz))
levelplot(z~x*y, data=d, cex.axis=1.5, cex.lab=1.5, cex.main=1.5, col.regions=colorRampPalette(c("blue", "yellow","red", "black")), at=c(seq(0,0.5,0.01),seq(0.55,1.4,0.05),seq(1.5,4.0,0.1)), xlab="x", ylab="time t", main="PDF P(x,t) for RC A, constant population")
dev.off()
這就是我的函數P(x,t)的最終熱圖圖的樣子:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.