在两行以上使用上标时修复图例标题 - R ggplot2

2024-01-03

我正在绘制我的研究区域的地图,但在编辑图例标题时遇到问题。 我需要它是“预计 40 年休耕期的水果生产率(水果 ha^-1)”,用四行写成。我可以使用 bquote() 将 -1 绘制为上标。但它创建了一个我无法提供的额外空间想办法把它去掉。只有当标题被分成多行时,才会出现多余的空格。 另外,表达式(atop())创建上标,但一旦我尝试将其分成两行以上,它就不会显示第三行和第四行。

This is the Map with the extra space using bquote() Map with the extra space in the legend title

This is the Map with the four line title using expression(atop()) enter image description here

我确实尝试了在互联网上找到的不同解决方案,包括这个帖子 https://stackoverflow.com/questions/13223846/ggplot2-two-line-label-with-expression。但他们都用额外的空间绘制第四行,或者只绘制第一行或第二行。

下面是我正在使用的代码。欢迎任何帮助。 评论是不同的尝试。

Data = Spatial_dist_fallows.csv https://drive.google.com/file/d/10wbXaYUTFzVNgwMcKME8hCNbRcdf-Mut/view?usp=sharing

library(sf) #sf = simple feature
library(ggplot2)
library(dplyr)

PAECM_fallows <-read.csv("spatial_dist_fallows.csv")
PAECM_fallows_sp <- st_as_sf(PAECM_fallows,coords = c("X", "Y"),crs = "+proj=longlat +datum=WGS84 +no_defs")

custom_bins_fruit = c(0,60,120,180,240,1400)
PAECM_fallows_fruit <- PAECM_fallows_sp %>% 
  mutate(prod_cat_fallow = cut(prod_40, breaks= custom_bins_fruit),
         age_cat_fallow = cut(age, breaks = c(11,17,22,29,60)))


prod_map_PAECM_fruit<-ggplot()+
  geom_sf(data = PAECM_fallows_fruit,aes(size = prod_cat_fallow), shape = 18, show.legend = "point")+
  scale_size_manual(values= c(2,3,4,5,6),
                  # name = "Projected fruit\nproductivity in\nfallows in 40 yrs \n(fruits ha^-1)",
                  name = bquote("Projected fruit\nproductivity in\nfallows in 40 yrs \n( fruits"*ha^-1*")"),
                  # name = expression(paste("Projected fruit productivity\nin fallows in 40 yrs\n"),bquote(paste("("*fruits~ha^-1*")"))),#(Fruits/ha)
                  name = expression(atop("Projected fruit",
                                     "productivity in",
                                     "fallows in 40 yrs",
                                     "( fruits ha"^-1,")")),
                  breaks= c(NA,"(0,60]","(60,120]","(120,180]","(180,240]","(240,1.4e+03]"),
                  labels= c("NA","\u2264 60","60 - 120","120 - 180","180 - 240","> 240"),
                  guide = guide_legend(override.aes = list(linetype = "blank", shape = 18, fill = NA)))+
  # labs(size = expression(atop("Projected fruit\nproductivity in\nfallows in 40 yrs\n(fruits"*ha^-1*")", sep="")))+ #comment name line at the scale_size_manual
  # labs(size = bquote("Projected fruit productivity \nin fallows in 40 yrs \n( fruits"*ha^-1*")"))+ #comment name line at the scale_size_manual
  ggplot2::theme_minimal()+
  ggplot2::theme(legend.text.align=0.5,
                 legend.title.align = 0.5,
                 plot.background = element_blank(),
                 panel.grid = element_line(colour = "white"),
                 panel.background = element_rect(fill = "grey87", color = "white"))+#,
  coord_sf(xlim = c(-68.45,-68.2), ylim = c(-11.05,-10.8))
prod_map_PAECM_fruit

额外的问题。一旦我开始使用 bquote,我就无法使用 theme(legend.title.align = 0.5) 对齐标题文本,还有其他想法吗?


经过一些其他尝试后,我确实为图例标题提出了以下解决方案。

name = expression(atop("",
                       atop(textstyle("Projected fruit"),
                            atop(textstyle("productivity in"),
                                 atop(textstyle("fallows in 40 yrs"),
                                      atop(textstyle("(fruits ha"^-1*")"))))))),

我使用 textstyle() 来绘制具有相同大小的所有文本,否则每次调用 atop() 时都会将其绘制得更小。 atop() 在第一行和第二行之间创建一个空格,这就是为什么代码的第一行是 atop("",所以第一行将是空白。

这是最终的代码和下面的地图。

library(sf) #sf = simple feature
library(ggplot2)
library(dplyr)

PAECM_fallows <-read.csv("spatial_dist_fallows.csv")
PAECM_fallows_sp <- st_as_sf(PAECM_fallows,coords = c("X", "Y"),crs = "+proj=longlat +datum=WGS84 +no_defs")

custom_bins_fruit = c(0,60,120,180,240,1400)
PAECM_fallows_fruit <- PAECM_fallows_sp %>% 
  mutate(prod_cat_fallow = cut(prod_40, breaks= custom_bins_fruit),
     age_cat_fallow = cut(age, breaks = c(11,17,22,29,60)))


prod_map_PAECM_fruit_legend_test<-ggplot()+
  geom_sf(data = PAECM_fallows_fruit,aes(size = prod_cat_fallow), shape = 18, show.legend = "point")+
  scale_size_manual(values= c(2,3,4,5,6),
              name = expression(atop("",
                                     atop(textstyle("Projected fruit"),
                                          atop(textstyle("productivity in"),
                                               atop(textstyle("fallows in 40 yrs"),
                                                    atop(textstyle("(fruits ha"^-1*")"))))))),
              breaks= c(NA,"(0,60]","(60,120]","(120,180]","(180,240]","(240,1.4e+03]"),
              labels= c("NA","\u2264 60","60 - 120","120 - 180","180 - 240","> 240"),
              guide = guide_legend(override.aes = list(linetype = "blank", shape = 18, fill = NA)))+
  ggplot2::theme_minimal()+
  ggplot2::theme(legend.text.align=0.5,
             legend.title.align = 0.5,
             plot.background = element_blank(),
             panel.grid = element_line(colour = "white"),
             panel.background = element_rect(fill = "grey87", color = "white"))+#,
  coord_sf(xlim = c(-68.45,-68.2), ylim = c(-11.05,-10.8))
prod_map_PAECM_fruit_legend_test
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在两行以上使用上标时修复图例标题 - R ggplot2 的相关文章

  • 使用 pkg:sjPlot 函数创建一个生成部分斜体单元格的数据框

    我正在尝试创建一个简单的数据表 其中 Coral taxon 列中的属名称为斜体 而 spp 列中的属名称为斜体 属名后面的部分不大写 我尝试使用 expression 函数对 Coral taxon 的每一行进行编码 但没有成功 sum
  • 如何在 R 中将字符串解析为层次结构或树

    有没有办法将表示组的字符串解析为 R 中的层次结构 假设我的小组结构如下 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 3 1 1 3 1 1 1 3 2 1 1 3 3 1 2 1 2 1 1 2 1 1 1 2 1 2 1
  • 更快的 %in% 运算符

    The 快速匹配 https cran r project org web packages fastmatch index html包实现了更快的版本match对于重复匹配 例如在循环中 set seed 1 library fastma
  • 读取R中打开的Excel文件

    有没有办法将打开的Excel文件读入R 当Excel中打开一个excel文件时 Excel会对文件加锁 比如R中的read方法无法访问该文件 你能绕过这个锁吗 Thanks 编辑 这发生在带有原始 Excel 的 Windows 下 发生错
  • 当有很多列时,使用 readr::read_csv() 导入数据时覆盖列类型

    我正在尝试使用 R 中的 readr read csv 读取 csv 文件 我导入的 csv 文件大约有 150 列 我只包含示例的前几列 我希望将第二列从默认类型 我执行 read csv 时为日期 覆盖为字符或其他日期格式 GIS Jo
  • RStudio 如何确定控制台宽度,为什么它似乎总是出错?

    我刚刚发现wid lt options width在 RStudio 中 它似乎是我日常控制台使用中令人烦恼的根源 或者更确切地说 更接近根源 我应该先说一下 我目前使用的是 R 3 2 2 RStudio 0 99 491 Linux M
  • 如何绘制大时间序列(数千次给药次数/药物剂量)?

    我正在尝试绘制医院中如何开出单一药物的图解 在这个虚拟数据库中 我在 2017 年 1 月 1 日之后遇到了 1000 名患者 绘图的目的是了解该药物的给药模式 在接近入院 出院或患者住院期间是否更频繁 高剂量给药 Get random d
  • R- 将某些列从 0 标准化为 1,其值等于 0

    我最近开始使用 are 我想扩展我的数据矩阵 我在这里找到了一种方法在两点之间缩放系列 https stackoverflow com questions 5468280 scale a series between two points
  • 用表达式分割轴标签

    我有一个带有包含表达式的长标签的图 我想将其分成两行 在表达式中添加 n 结果不符合预期 ylabel lt expression A very long label with text and n expression alpha bet
  • 对 data.table 中的列表列执行操作

    假设我有一个data table 例如dt lt data table foo list 1 3 4 6 bar c 2 7 如何使用 dt 框架对 foo 向量列表执行操作 操作可能是将 bar 添加到 foo 返回列表 3 5 11 1
  • 融化R中的下半矩阵

    如何融化下半三角形加对角矩阵 11 NA NA NA NA 12 22 NA NA NA 13 23 33 NA NA 14 24 34 44 NA 15 25 35 45 55 A lt t matrix c 11 NA NA NA NA
  • 一段 R 代码会影响 foreach 输出中的随机数吗?

    我使用运行模拟foreach and doParallel并与随机数 名为random在代码中 简而言之 我模拟一个足球联赛 随机生成所有比赛的获胜者以及相应的结果 在dt base没有比赛进行 在dt ex1 and dt ex24场比赛
  • 将字符串列拆分为多个虚拟变量

    作为 R 中 data table 包的相对缺乏经验的用户 我一直在尝试将一个文本列处理为大量指示符列 虚拟变量 每列中的 1 表示特定的子字符串是在字符串列中找到 例如我想处理这个 ID String 1 a b 2 b c 3 c 进入
  • 将 ftransform 与折叠 R 包中的 fgroup_by 一起使用

    我正在尝试重现以下输出dplyr代码与R包裹collapse dplyr Code library tidyverse starwars gt select name mass species gt group by species gt
  • 使用 R 下载压缩数据文件、提取和导入数据

    EZGraphs 在 Twitter 上写道 很多在线 csv 都被压缩了 有没有办法下载 解压缩存档并使用 R 将数据加载到 data frame Rstats 我今天也尝试这样做 但最终只是手动下载 zip 文件 我尝试过类似的东西 f
  • R - 计算 bin 中特定值的数量

    我有一个如下所示的数据框 df Value lt c 1 1 0 2 1 3 4 0 0 1 2 0 3 0 4 5 2 3 0 6 Sl lt c 1 20 df lt data frame Sl Value gt df Sl Value
  • 从表达式函数获取父属性

    假设我有以下课程 public class Model public AnotherModel InnerModel get set public class AnotherModel public String Value get set
  • 使用officer R导出时如何提高ggplots的分辨率

    我想将图表导出到 PPT 并使用Officer 包来实现相同的目的 但是 图表的默认分辨率较低 我想更改它 我目前正在使用以下电话 ph with gg p1 type chart res 1200 其中 p1 是 ggplot 对象 运行
  • R 闪亮仪表板中的动态重复条件面板

    我正在尝试创建一个动态条件面板 所以我的条件如下 在用户界面中输入 selectInput inpt Input Number seq 1 50 1 selectize FALSE 我的条件面板 UI 输入是 conditionalPane
  • 不同编程语言中的浮点数学

    我知道浮点数学充其量可能是丑陋的 但我想知道是否有人可以解释以下怪癖 在大多数编程语言中 我测试了 0 4 到 0 2 的加法会产生轻微的错误 而 0 4 0 1 0 1 则不会产生错误 两者计算不平等的原因是什么 在各自的编程语言中可以采

随机推荐