我正在尝试制作(晶格)水平图。我有一个数据框,其列是我要绘制的每个值的i和j空间坐标,这些数据值(在此为d),以及名为fname
的列(即文件名,但只有一个文件名)在我使用的数据集中)。
我的问题是levelplot
在没有关联的i和j值的情况下绘制或联接(或其他东西!)数据(请参见下面的示例图像)。没有60
该图是通过以下方式创建的:
pl <- levelplot(d ~ j * i | fname, data = my.data.frame)
print(pl)
我不明白什么我该如何纠正?应该有一条垂直的白色条(没有数据),范围大约为60
编辑
下面是一个相当小的示例,即在原始图上“放大”:
my.data.frame
是: i j d
599 78 56 1.355702e-01
600 77 56 6.296867e-02
601 76 56 1.489721e-01
602 75 56 1.063881e-01
603 74 56 1.544339e-01
604 73 56 1.937138e-01
605 72 56 1.313793e-01
606 71 56 1.220090e-01
631 76 57 8.457023e-02
632 75 57 1.256807e-01
633 74 57 4.346455e-02
634 73 57 5.839973e-02
635 72 57 1.099435e-01
636 71 57 1.648284e-01
662 73 58 7.551661e-02
663 72 58 7.197449e-02
664 71 58 6.525586e-02
700 79 79 1.655431e-01
701 78 79 3.587718e-01
702 77 79 3.285322e-01
703 76 79 2.604316e-01
704 75 79 3.154260e-01
705 74 79 1.599363e-01
706 73 79 1.006594e-01
707 72 79 1.143150e-01
708 71 79 3.442250e-02
743 79 80 1.929037e-01
744 78 80 1.828739e-01
745 77 80 2.542400e-01
746 76 80 3.679110e-01
747 75 80 4.160630e-01
748 74 80 2.187383e-01
749 73 80 5.914896e-02
750 72 80 8.890981e-02
751 71 80 1.114226e-01
785 79 81 1.934852e-01
786 78 81 3.357556e-01
787 77 81 2.223992e-01
788 76 81 2.753734e-01
789 75 81 3.602629e-01
790 74 81 1.813481e-01
791 73 81 7.269607e-02
792 72 81 8.458230e-02
793 71 81 2.189210e-01
825 79 82 2.449923e-01
826 78 82 2.649659e-01
827 77 82 2.701585e-01
828 76 82 2.036100e-01
829 75 82 2.162900e-01
830 74 82 2.097996e-01
831 73 82 9.479770e-02
832 72 82 1.349027e-01
833 71 82 7.756859e-02
863 79 83 1.841222e-01
864 78 83 2.462909e-01
865 77 83 4.760483e-01
866 76 83 1.393683e-01
867 75 83 1.849111e-01
868 74 83 1.072082e-01
869 73 83 1.453932e-01
870 72 83 8.461537e-02
871 71 83 3.600376e-02
899 79 84 2.223011e-01
900 78 84 2.266368e-01
901 77 84 2.682749e-01
902 76 84 1.535989e-01
903 75 84 8.656537e-02
904 74 84 1.155910e-01
905 73 84 1.550887e-01
906 72 84 1.052334e-05
907 71 84 9.409200e-03
然后使用以下命令创建“放大”图:
library(lattice)
pl <- levelplot(d ~ j * i, data = my.data.frame)
print(pl)
谢谢。
最佳答案
levelplot()
在提供data.frame时最可预测地工作,该data.frame具有要绘制的网格中每个单元格(即行和列坐标的每种组合)的值。为此,我编写了一个smal函数,该函数将“填充”此特定数据集以及其他类似的data.frames,它们缺少需要绘制的某些像素的行。
使用它(或类似的东西)应该可以省去“手工”处理的麻烦,从而可以找出哪些单元格缺少数据。 (例如,事实证明,即使您提供的一小部分数据在该明显缺少数据的中央条带之外的某些单元中也缺少值。)
library(lattice)
makeFullGrid <- function(dat) {
## Create a list with coordinates for a full grid and all
## values set to 0
fullgrid <-
with(dat, expand.grid(i = seq(max(i), min(i)),
j = seq(min(j), max(j)),
D = 0))
## Merge it with your current data, then add the two data
## columns together
dat <- merge(fullgrid, dat, by = c("j", "i"), all.x=TRUE)
dat$d <- dat$d + dat$D
dat$D <- NULL ## Clean up
return(dat)
}
## Fix up your data
myDat <- my.data.frame
myFullDat <- makeFullGrid(myDat)
## Create the levelplot
pl <- levelplot(d ~ j * i, data = myFullDat)
print(pl)