首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ggmap +ggmap不会绘制特定的值。

ggmap +ggmap不会绘制特定的值。
EN

Stack Overflow用户
提问于 2017-10-17 19:12:18
回答 1查看 223关注 0票数 2

我试图获取一个空间数据集,旋转它,并用ggplot/ggmap来绘制它们。我已经包含了数据集,用于旋转数据集的函数,以及我希望使用的绘图方法。

代码语言:javascript
复制
library(ggplot2)
library(ggmap)
library(scales)
source("DEMOFunctions.R")

PlantLAT <- 39.28682
PlantLON <- -96.1172
Emissions <- 12591532084.8523
Resolution <- 0.1

DataPoints <- read.delim("JEC-10000m2.txt", header = TRUE, sep = "")
Origin_DataPoints <- ShiftToOrigin("S", DataPoints, PlantLAT, PlantLON)

Rotated_Origin_DataPoints <- RotateDispersion(Origin_DataPoints, 25)

Rotated_DataPoints <- ShiftToOrigin("U", Rotated_Origin_DataPoints, 
PlantLAT, PlantLON)

Quantiles <- quantile(DataPoints$CO2, c(0.1, 0.955))
qn01 <- rescale(c(Quantiles, range(DataPoints$CO2)))

map <- get_map(location = c(lon = -95, lat = 43), zoom = 6, maptype = 
"terrain", colo = "bw")

ggmap(map) +
  geom_raster(data = DataPoints, aes(x = LON, y = LAT, fill = CO2), 
  interpolate = TRUE) +
  geom_raster(data = Rotated_DataPoints, aes(x = LON, y = LAT, fill = CO2), 
  interpolate = TRUE) +
  scale_fill_gradientn(colours = colorRampPalette(c("limegreen", "yellow", 
  "orange", "red4"))(50),
                   values = c(0, seq(qn01[1], qn01[2], length.out = 2000), 
    1), 
                   limits = c(min(DataPoints$CO2), max(DataPoints$CO2)),
                   name = "Concentration (kg/cbm)",
                   guide = FALSE) +
  coord_cartesian() +
  theme_bw() +
  xlab("Longitude") +
  ylab("Latitude") +
  theme(strip.text.y = element_text(size = 20, colour = "black", face = 
  "bold", angle = -90)) +
  theme(plot.title = element_text(size = 30, face = "bold")) +
  theme(axis.text=element_text(size=15), 
    axis.title=element_text(size=25,face="bold")) +
    theme(axis.title.y = element_text(margin = margin(t = 10, r = 10, b = 
10, l = 10))) +
  theme(plot.margin=unit(c(1,1,1,1),"cm"))

每次我都可以让"DataPoints“来绘制图,但旋转的"Rotated_DataPoints”有时只绘制;这取决于我旋转了多少。(这可以通过"RotateDispersion“函数中包含的数字进行调整。)

我对这种不一致感到困惑。(在之前的解决方案中,我将旋转分散文件中的小数位数限制在4位,但这只是一个小小的改进,而且仍然存在不一致之处。)

"JEC-10000m2.txt“文件可以找到这里,"DEMOFunctions.R”脚本可以找到这里。这个脚本包含"ShiftToOrigin“和"RotateDispersion”函数。

提前感谢您的帮助!抱歉,代码格式和稀疏注释。此代码旨在作为“概念的证明”运行。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-18 11:04:43

当您旋转数据集时,x或y轴上的相邻点可能变得如此接近,以至于geom_raster() (或geom_tile()geom_raster()只是一个特例)最终会创建0宽度/高度的瓷砖。

让我们用一个简单的例子来说明:

代码语言:javascript
复制
library(dplyr)

set.seed(123)
orig <- data.frame(
  x = rep(1:5, each = 4),
  y = rep(1:4, 5),
  z = rpois(20, lambda = 5)
)

orig <- orig %>%
  mutate(t = case_when(x == 1 & y == 1 ~ "C1",
                       x == 1 & y == 4 ~ "C2",
                       x == 5 & y == 4 ~ "C3",
                       x == 5 & y == 1 ~ "C4",
                       TRUE ~ NA_character_))

在旋转之前,这就是图的样子(我为四个角添加了标签,这样就可以更容易地遵循旋转):

代码语言:javascript
复制
p.orig <- ggplot(orig, aes(x = x, y = y, fill = z, label = t)) +
  coord_fixed(xlim = c(0, 6), y = c(0, 5)) +
  theme_bw()

p.orig + geom_point(shape = 22, size = 10) + geom_text() + ggtitle("Unrotated points")

p.orig + geom_raster() + geom_text() + ggtitle("Unrotated raster")

我们可以看到,数据点位于直线行&列,垂直于x/y轴。geom_raster创建的相应的瓷砖彼此很好地联系在一起。

现在,让我们稍微旋转一下dataframe (我修改了来自RotateDispersion()函数的相关代码):

代码语言:javascript
复制
theta = 5/100
rotated <- orig %>%
  mutate(y = x * sinpi(theta) + y * cospi(theta),
         x = x * cospi(theta) - y * sinpi(theta))

p.rot <- ggplot(rotated, aes(x = x, y = y, fill = z, label = t)) +
  coord_fixed(xlim = c(0, 5), y = c(0.5, 5.5)) +
  theme_bw()

p.rot + geom_point(shape = 22, size = 10) + geom_text() + ggtitle("Rotated points")
p.rot + geom_raster() + geom_text() + ggtitle("Rotated raster")

geom_points()的地块旋转时没有任何其他差异(点大小由size = 10显式控制),但geom_raster()图中的块明显缩小。

仔细观察可以发现,每个瓷砖的大小受每个轴上相邻数据点之间的距离所限制。(使用Photoshop添加的行)

对于一些旋转角度(例如theta = 25/100),geom_tile()将返回空白画布,因为每个瓷砖的宽度和高度被压缩到0,而geom_raster()则会抛出一个错误。

根据您的用例,geom_point()可能比geom_raster()geom_tile()工作得更好。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46797547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档