下面的代码生成了一个全息图以及绘制的一些点,其中子区域由一个随机指定进行着色,仅用于本例.

我相当喜欢这种方法,但想要改进几个方面:

  1. 我想要摆脱的灰色和白色网格背景
  2. 我认为州图像被zoom 到我的绘图窗口的大小,我更喜欢州的相对比例更真实
  3. 尽管只有几个(这里有4个)类别,但 colored颜色 标度是以 spectral 的形式呈现的,有没有好的方法将 colored颜色 图例显示为几个离散的选项

非常感谢!

当前代码:

library(tidyverse)
library(ggmap)
library(maps)
library(mapdata)
library(ggthemes)


map_data(
  "county"
) -> usa  
usa %>%
  filter(
    region == "california"
  ) -> ca

#  create some arbitrary designations for choropleth and join to main dataframe
ca_subregion_designations <- data.frame(unique(ca$subregion),sample.int(4,length(unique(ca$subregion)),replace = TRUE))
names(ca_subregion_designations) <- c("subregion","Designation")
ca <- merge(x = ca,y = ca_subregion_designations, by = "subregion")

#  Some random points in CA with some additional point status flag
ca_points <- data.frame(point_id = c(101,102,103), lat = c(37.747116,38.25502,37.961901), long = c(-122.420889,-122.631641,-121.300782), status = c('happy','sad','happy'))


# CA graph with subregions (counties) shaded by Designation and points identified by status
ggplot() + 
  geom_polygon(
    data = ca, 
    aes(
      x = long, 
      y = lat,
      group = group,
      fill = Designation,
    ), 
    color = "white"
  )+ 
  geom_point(
    data = ca_points, 
    aes(
      x = long, 
      y = lat,
      color =  status, 
      group=status
    ) , 
    size = 1.5, 
  )+
  scale_color_manual(values = c("happy" = "green","sad"="red"))

推荐答案

依次满足您的期望输出:

  1. 这些由gglot2::theme内的panel.backgroundpanel.grid控制.调到element_blank()
  2. 使用coord_fixed()可使每个轴上的值相互相对
  3. 因为您的fill个值都是整数,所以ggplot2默认将它们视为连续变量.要覆盖它,请将填充值声明为factor(),并使用scale_fill_manual()设置 colored颜色 .我使用了十六进制值,但您也可以使用R colored颜色 名称.

出于说明的目的,我夸大了您的一些价值观.另外,如果您正在使用空间数据,我建议您使用sf包,这有点像是一个学习曲线,但它使绘制 map 变得容易得多.

ggplot() + 
  geom_polygon(data = ca,
               aes(x = long, y = lat, group = group, fill = factor(Designation)),
               color = "white") + 
  geom_point(data = ca_points,
             aes(x = long, y = lat, color = status, group = status),
             size = 4) +
  scale_fill_manual(values = c("#E69F00", "#56B4E9", "#009E73", "#CC79A7"),
                    name = "Designation") +
  scale_color_manual(values = c("happy" = "black", "sad" = "grey40"),
                     name = "Status") +
  coord_fixed() +
  theme(panel.background = element_blank(),
        panel.grid = element_blank(),
        plot.margin = grid::unit(c(0,0,0,0), "mm"))

result

R相关问答推荐

提取R中值和列名的所有可能组合

按R中的组查找相邻列的行累积和的最大值

如何使用shinyChatR包配置聊天机器人

从嵌套列表中智能提取线性模型系数

基于不同组的列的相关性

在数学中正确显示摄氏度、开氏度或华氏度

如何改变时间图R中的悬停信息?

将文件保存到新文件夹时,切换r设置以不必创建目录

如何从像glm这样的模型中提取系数表的相关性?

提取第一个下划线和最后一个下划线之间的任何内容,例外情况除外

在数组索引上复制矩阵时出错

DEN扩展包中的RECT树形图出现异常行为

ComplexHEAT:使用COLUMN_SPLIT时忽略COLUMN_ORDER

使用Scale_*_MANUAL时在图例中保留未使用的系数级别

TreeNode打印 twig 并为其上色

自动STAT_SUMMARY统计与手动标准误差之间的差异

将列的值乘以在不同数据集中找到的值

使用一个标签共享多个组图图例符号

对数据帧中的列进行子集设置以通过迭代创建新的数据帧

如何根据每个子框架中分类因子的唯一计数来过滤子框架列表?