3

我正在寻找一种在小比例尺地图上绘制栅格数据(使用ggplot和)的方法。geom_raster我想在 shapefile 的特定区域使用ggaltcoord_proj“放大”,但我遇到了错误geom_raster only works with Cartesian coordinates

ggplot() +
    geom_polygon(data = land_df, aes(long, lat, group = group), fill = 'grey25')+
    geom_raster(data = df, aes(lon_bin, lat_bin, fill = sum_hours)) +
    coord_proj(xlim = c(-67, -63),ylim = c(0, 9))

是否有另一种使用 coord_proj 生成放大栅格地图并避免 geom_raster 仅适用于笛卡尔坐标的限制的简单方法?

我能想到的其他选项是为每个“放大”区域生成单独的 shapefile,但我正在绘制许多这些栅格,并且宁愿不必为每个栅格生成单独的 shapefile,而是使用 coord_proj 以编程方式指定栅格地图限制.

谢谢

4

1 回答 1

7

我认为您需要使用geom_tile()而不是geom_raster(). geom_raster()内部使用 a rasterGrob,这是一个只能线性缩放的位图。因此限制了笛卡尔坐标系。geom_tile()绘制可以转换为任何坐标系的单个矩形。

我没有你的数据集,但我可以举一个非常简单的例子:

df <- data.frame(x = 1:100) # a very simple dataset

p_raster <- ggplot(df, aes(x, fill = x, y = 0)) + 
  geom_raster() + 
  scale_fill_distiller()

p_raster

在此处输入图像描述

p_raster + coord_polar()
## Error: geom_raster only works with Cartesian coordinates

现在有了geom_tile()

# for geom_tile(), map both fill and color to avoid drawing artifacts
p_tile <- ggplot(df, aes(x, color = x, fill = x, y = 0)) + 
  geom_tile() + 
  scale_fill_distiller() +
  scale_color_distiller()

p_tile

在此处输入图像描述

p_tile + coord_polar()

在此处输入图像描述

于 2018-01-10T04:43:39.333 回答