gpt4 book ai didi

r - 如何使用 levelplot 仅在观察到的指标处显示数据?

转载 作者:行者123 更新时间:2023-12-04 21:59:53 25 4
gpt4 key购买 nike

我正在尝试制作(格子)水平图。我有一个数据框,其列是我要绘制的每个值的 ij 空间坐标,这些数据值(此处为 d ) 和一个名为 fname 的列(即文件名,但我在这里使用的数据集中只有一个文件名)。

我的问题是 levelplot 正在绘制或连接(或其他东西!)没有关联的 ij 值的数据(请参阅示例图像,如下)。没有 60 <j < 75 的数据,但正在绘制这些位置的值。

Problematic levelplot

情节是由:

pl <- levelplot(d ~ j * i | fname, data = my.data.frame)
print(pl)

我有什么不明白的?我该如何纠正这个问题?在大约 60 <j < 75 的范围内应该有一条垂直的白色 strip (没有数据的地方)。

编辑

下面是一个相当简单的例子,“放大”了原始图:

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() 提供的数据框具有您想要的网格中每个单元格(即行和列坐标的每个组合)的值时,将以最可预测的方式工作阴谋。为此,我编写了一个小函数来“填充”这个特定的数据集,以及其他类似的数据帧,它们缺少您需要绘制的某些像素的行。

使用它(或类似的东西)应该可以让您省去“手工”搞乱,试图找出哪些单元格丢失数据的麻烦。 (例如,事实证明,即使您提供的数据的一小部分在明显缺失数据的中央 strip 之外的某些单元格中也缺失值。)

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)

enter image description here

关于r - 如何使用 levelplot 仅在观察到的指标处显示数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9791114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com