r - 如何在 ggplot 中按值重新排序轴后更改轴文本

标签 r ggplot2

我正在尝试制作一个 ggplot,其中 y 轴上分类变量的顺序为 1) 按另一个变量的值重新排序,然后 2) 轴文本交换为另一个值,其中给定的新值级别标签可以有多个来自原始变量的对应值。这是完成第一部分的可重现示例:

df <- data.frame(id = rep(letters[1:5], each=10),
                 id_2 = rep(c('group1', 'group2', 'group1', 'group3', 'group4'), each=10),
                 date = rep(seq(0, 9), 5),
                 start_point = rep(rnorm(5, 0, 1), each=10),
                 change_rate = rep(rnorm(5, 0, 1), each=10),
                 variance = rnorm(50, 0, 1))

df$fill_val <- df$start_point + df$date*df$change_rate + df$variance

ggplot(df, aes(x=date, y=reorder(id, fill_val), fill=fill_val)) +
  geom_tile()

这会产生:

Example 1

现在,我想用 id_2 中找到的值替换 y 轴上的标签。请注意,您当然可以在此玩具示例中手动执行此操作,如下所示:

ggplot(df, aes(x=date, y=reorder(id, fill_val), fill=fill_val)) +
  geom_tile() +
  scale_y_discrete(breaks=c('d', 'b', 'a', 'e', 'c'), 
                   labels=c('group3', 'group2', 'group1', 'group4', 'group1'))

制作:

Example 2

但对于真实数据,我需要重复执行此操作,并且在某些图中,y 轴上可能有几十个值,因此不能像上面那样手动修复。

最佳答案

这可以通过标签的命名向量来实现。该载体可以使用例如构建tibble::deframe:

set.seed(42)

df <- data.frame(id = rep(letters[1:5], each=10),
                 id_2 = rep(c('group1', 'group2', 'group1', 'group3', 'group4'), each=10),
                 date = rep(seq(0, 9), 5),
                 start_point = rep(rnorm(5, 0, 1), each=10),
                 change_rate = rep(rnorm(5, 0, 1), each=10),
                 variance = rnorm(50, 0, 1))

df$fill_val <- df$start_point + df$date*df$change_rate + df$variance

library(ggplot2)
library(tibble)
library(dplyr)

labels <- df %>% 
  select(id, id_2) %>% 
  distinct() %>% 
  tibble::deframe()

ggplot(df, aes(x=date, y=reorder(id, fill_val), fill=fill_val)) +
  geom_tile() +
  scale_y_discrete(labels = labels)

关于r - 如何在 ggplot 中按值重新排序轴后更改轴文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65740329/

相关文章:

r - 使用 ggplot 2 以对数刻度绘制负值

r - 获取与 ggplot + stat_ecdf() 关联的数据

r - 如何确定ggplot2对象每一层的geom类型?

r - ggplot2:彩色垂直线

按名称返回所有因子级别作为来自三列数据的新列。表 [R]

r - 计算向量在另一个向量中的出现次数

r - 获取当前脚本的路径

r - Pdf Markdown 表格垂直线

r - 如何使 PCA 矢量箭头加粗(更宽)?

r - R中的四参数β分布