当在R中使用levelplot(来自晶格包)时,我注意到如果column.value和row.values的范围很小(例如,范围小于1),那么图的边缘会有额外的空白。如果列值和行值的范围较大(例如范围为10),则此问题消失。
下面的例子说明了这个问题:
library(gplots) # for colorpanel()
library(lattice) # for levelplot()
#generate data
myData = runif(100) #generate vector of 100 random numbers
myMatrix=matrix(myData, sqrt(length(myData)), sqrt(length(myData)))
#generate vectors that will be used for col.values and row.values
labelIncrement= 1/10
labelLow = -0.5
labelHigh = 0.5 - labelIncrement
dataForRow.values <- c(seq(labelLow, labelHigh, labelIncrement))
dataForColumn.values <- c(seq(labelLow, labelHigh, labelIncrement))
myLevelsArbitrary <- c(0, 0.2, 0.4, 0.6, 0.8, 1.0)
myColors = topo.colors(length(myLevelsArbitrary)+1)
myLevelPlot = levelplot(myMatrix,
at=myLevelsArbitrary,
col.regions=myColors,
column.values=dataForColumn.values,
row.values=dataForRow.values,
main="Title",
xlab="Distance from center (cm)",
ylab="Distance from center (cm)",
colorkey=list(width=3))
plot(myLevelPlot)
此图像为myLevelPlot
现在,让我们调整上面的代码,使行值和列值的范围更大:
labelIncrement= 1
labelLow = -5
labelHigh = 5 - labelIncrement
此myLevelPlot图像是通过重新运行row.values和column.values范围较大的代码生成的。请注意,以下图像中没有出现多余的空白。
那么,当row.values和column.values的范围很小时,如何避免出现这种无关的空白呢?
这很难。这项工作:scales = "sliced"
myLevelPlot = levelplot(myMatrix,
at=myLevelsArbitrary,
col.regions=myColors,
column.values=dataForColumn.values,
row.values=dataForRow.values,
main="Title",
xlab="Distance from center (cm)",
ylab="Distance from center (cm)",
scales = "sliced",
colorkey=list(width=3)
)
plot(myLevelPlot)
我不喜欢这两个警告,但有时警告可以忽略。。。