R语言 自定义图例直方图轴标签

i2loujxw  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(92)

我在图例中有一个直方图,它显示了我的数据的分布。我想编辑轴的标签以提高可读性。理想情况下,这将被更改以反映类别,因此可以删除500和1500的值。

library(tmap)

custom_colors <- c("#ffd500",'orange', "#e60000")

tm_map <- tm_shape(merged) +
  tm_borders(lwd=NA) +
  tm_polygons("aantal_observaties", 
              id = "pc4", 
              breaks= c(1,1001, 2001, 3000),
              n=3,
              palette = custom_colors, 
              style = "fixed", 
              title = "Observations", 
              alpha = 1,
              na.color="purple",
              colorNA='#ebebeb',
              legend.hist=TRUE,
              legend.show=FALSE) +

tm_layout(legend.outside=TRUE,legend.outside.position = "right",
          frame=FALSE,
          title = 'Observations',
          title.size = 1) 
  
tm_map + tm_add_legend(labels=c("1 to 1000", "1001 to 2000", "2001 to 3000", "0"),
                col = c("#ffd500",'orange', "#e60000", "#ebebeb"),
                border.lwd = NA,
                                )

字符串


的数据

3df52oht

3df52oht1#

我做了一些尝试,似乎tmap v4不支持legend.hist。安装tmap并加载库给了我这样的消息:

> library(tmap)
Breaking News: tmap 3.x is retiring. Please test v4, e.g. with
remotes::install_github('r-tmap/tmap')

字符串
无论如何,在安装了那个版本之后,我无法获得legend.hist
不幸的是,这是不可能的(还没有)。tmap目前正在进行一次大的更新(到v4):我们仍然必须决定如何处理直方图和其他图例图。
在这种情况下,您可以使用ggplot2patchwork获得类似的东西,尽管指定布局有点笨拙。
因为你没有发布数据,我创建了一些我认为足够相似的数据:

library(dplyr)
library(sf)

# outline
outline <- system.file("gpkg/nc.gpkg", package = "sf") |>
    sf::st_read() |>
    sf::st_geometry() |>
    sf::st_union() |>
    sf::st_as_sf()

# create polygons
polys <- outline |>
    sf::st_sample(500) |>
    sf::st_buffer(units::as_units(2, "mi")) |>
    sf::st_as_sf()

# generate data
obs <- rnorm(10000, mean = 0, sd = 900) |>
    round() |>
    abs() |>
    sample(size = nrow(polys))

# add observations for polys
polys <- polys |>
    dplyr::mutate(obs = obs)

# add factor for category
polys <- polys |>
    dplyr::mutate(group = dplyr::case_when(
        dplyr::between(obs, 0, 1000) ~ "0 to 1000",
        dplyr::between(obs, 1001, 2000) ~ "1001 to 2000",
        obs > 2000 ~ "2001+"
    )) |>
    dplyr::mutate(group = as.factor(group))


至于情节:

library(ggplot2)
library(patchwork)

map <- ggplot() +
    geom_sf(data = outline) +
    geom_sf(data = polys, aes(fill = group), show.legend = FALSE) +
    scale_fill_manual(values = c("#ffd500", "orange", "#e60000")) +
    theme_void()

hist <- ggplot(data = polys, aes(x = obs, fill = group)) +
    geom_histogram(binwidth = 25) +
    scale_fill_manual(
        values = c("#ffd500", "orange", "#e60000")
    ) +
    theme_minimal() +
    theme(
        legend.position = "bottom",
        legend.title = element_blank(),
        plot.title = element_text(face = "bold"),        
        legend.direction = "vertical",
        axis.title.x = element_blank(),
        axis.title.y = element_blank()
    ) +
    ggtitle("Observations")

design <- "AAAA#\nAAAAB\nAAAA#"

wrap_plots(
    map, hist,
    design = design
)


x1c 0d1x的数据
由于单独创建直方图,因此您可以完全控制它。知道这不是理想的,因为它不在tmap中,但认为它可能接近您想要的。
有关使用patchwork(或gridExtra/cowplothere的更多信息

相关问题