在 ggplot 中用 geom_tile 绘制连续的强度
Posted
技术标签:
【中文标题】在 ggplot 中用 geom_tile 绘制连续的强度【英文标题】:Plot the intensity of a continuous with geom_tile in ggplot 【发布时间】:2015-07-19 20:59:50 【问题描述】:我正在尝试在空间上绘制一个连续变量。我看到这个例子得到了我需要的相同结果:
library("MASS")
library("ggplot2")
library(reshape2)
DB<-melt(volcano)
ggplot(DB, aes(x=Var1, y=Var2, fill=value)) +geom_tile()
所以我对我的数据做了:
library(repmis)
url<-"https://www.dropbox.com/s/4m5qk32wjgrjq40/dato.RDATA"
source_data(url)
library(ggplot2)
ggplot(dato,aes(y=variable,x=y,fill=value))+geom_tile()
太棒了。但是我的“x”和“y”是距离空间点的公里(东和北)。我在纬度和经度上转换了这些。但是现在我的情节不行了!
ggplot(dato,aes(y=lat,x=long,fill=value))+geom_tile()
我不明白为什么。无论如何,将我的数据绘制成点,结果非常相似:
ggplot(dato,aes(y=lat,x=long,fill=value))+geom_point()
ggplot(dato,aes(y=variable,x=y,fill=value))+geom_point()
【问题讨论】:
可能相关:docs.ggplot2.org/0.9.3.1/scale_gradient.html,docs.ggplot2.org/0.9.2.1/scale_gradient2.html 我认为这是因为经纬度点的间距不均匀,因此不形成网格。如果距离是均匀分布的,那么坐标就不可能,反之亦然。如果您绘制纬度和经度点,您会发现它们略微倾斜。您可能需要进行一些插值才能使其工作。 我发现插值有点复杂。有没有 geom_tile 的替代方法来获得相同的结果? 很抱歉现在才看到这条评论,但看起来你有一个很好的解决方案:) 【参考方案1】:你可以稍微作弊,使用方形的geom_point
:
#devtools::install_github("sjmgarnier/viridis")
library(viridis)
library(ggplot2)
library(ggthemes)
library(scales)
library(grid)
gg <- ggplot(dato)
gg <- gg + geom_point(aes(x=long, y=lat, color=value), shape=15, size=5)
gg <- gg + coord_equal()
gg <- gg + scale_color_viridis(na.value="#FFFFFF00")
gg <- gg + theme_map()
gg <- gg + theme(legend.position="right")
gg
我没有预测纬度/经度对,只是使用了coord_equal
。您应该为正在映射的区域使用适当的投影。
而且,现在你让我好奇米兰周围的热点是什么 :-)
gmap <- get_map(location=c(9.051062, 45.38804, 9.277473, 45.53438),
source="stamen", maptype="toner", crop=TRUE)
gg <- ggmap(gmap)
gg <- gg + geom_point(data=dato, aes(x=long, y=lat, color=value), shape=15, size=5, alpha=0.25)
gg <- gg + coord_map()
gg <- gg + scale_color_viridis(na.value="#FFFFFF00")
gg <- gg + theme_map()
gg <- gg + theme(legend.position="right")
gg
【讨论】:
真的很鼓舞人心。你让我开心。以上是关于在 ggplot 中用 geom_tile 绘制连续的强度的主要内容,如果未能解决你的问题,请参考以下文章
如何使用箭头指示的偏移 geom_text() 标签绘制 geom_tile()?