R: 使用ggplot2将等温线绘制为等值线

4

我正在尝试使用ggplot2包创建等温线图,您可以在评论中找到显示所需结果的示例。我在网上看到了许多这样做的示例,例如:

data <- read.table("http://s000.tinyupload.com/download.php?file_id=01371475872599670620&t=0137147587259967062053048", header=TRUE)

ggplot(data) + aes(x=x, y=y, z=z, fill=z) + stat_contour() + geom_tile()

当我使用完全相同的代码和我的数据时,我得到了以下结果:
图片:

graph with isolines

正如您在上面的图像中所看到的,数据似乎与stat_contour()部分配合得很好,看起来完美,但它不适用于geom_tile(),后者似乎只会创建那三条水平线。数据似乎被正确读取,因为等高线工作并且图例也包含了正确的值。我不知道为什么文件不会被填充。

如果有任何帮助,我将不胜感激,谢谢!


1
一个问题应该是自包含的,不依赖于外部网站。请在您的问题中分享您的数据。请参阅此FAQ 以了解如何做到这一点。 - Roland
请提供需要翻译的具体内容。 - oepix
非常抱歉我使用了外部网站。由于我的声誉不够,我无法将图像添加到文本中。至于数据集:其他数据集没有问题,只有我正在尝试使用的这个特定数据集存在问题。 - oepix
我(以及其他人)不会去外部上传服务获取你的数据。 - Roland
我完全能理解为什么有人不这么做。但是否有任何猜测,为什么轮廓线绘制得正确而瓦片却没有呢? - oepix
@Roland 这是一个安全的数据读取方式:dat <- read.table("http://s000.tinyupload.com/download.php?file_id=01371475872599670620&t=0137147587259967062053048", header=TRUE)(使用 lynx 并成为一个偏执的信息安全人员 FTW :-). 760 行数据可能会让 dput() 处理有些吃力。 - hrbrmstr
1个回答

10

可能是由于不规则的网格导致的。尝试先对值进行插值然后再绘制图形:

library(ggplot2)
library(akima)
library(viridis)
library(ggthemes)

dat <- read.table("http://s000.tinyupload.com/download.php?file_id=01371475872599670620&t=0137147587259967062053048", header=TRUE)

di <- interp(dat$x, dat$y, dat$z,
             xo=seq(min(dat$x), max(dat$x), length=200),
             yo=seq(min(dat$y), max(dat$y), length=200))

dat_interp <- data.frame(expand.grid(x=di$x, y=di$y), z=c(di$z))

ggplot(dat_interp) +
  aes(x=x, y=y, z=z, fill=z) +
  geom_tile() +
  stat_contour(color="white", size=0.25) +
  scale_fill_viridis() +
  theme_tufte(base_family="Helvetica")

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接