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

R 如何在ggplot中按值对轴重新排序后更改轴文本,r,ggplot2,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),

我试图制作一个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()

制作:


但对于实际数据,我需要重复这样做,在一些图中,y轴上可能有几十个值,因此不能像上面那样手动修复。

这可以通过标签的命名向量来实现。此向量可以使用tibble::deframe等构建:

第42集 df% 碎片整理 ggplotdf,aesx=日期,y=重新排序,填充值,填充值+ 地砖+ 缩放y离散标签=标签
这可以通过标签的命名向量实现。此向量可以使用tibble::deframe等构建:

第42集 df% 碎片整理 ggplotdf,aesx=日期,y=重新排序,填充值,填充值+ 地砖+ 缩放y离散标签=标签 您也可以尝试:

library(ggplot2)
#Data
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

#Keys
vals <- df[!duplicated(df$id),c('id','id_2')]
#Plot
ggplot(df, aes(x=date, y=reorder(id, fill_val), fill=fill_val)) +
  geom_tile()+
  scale_y_discrete(breaks=vals$id, 
                   labels=vals$id_2)
输出:

您也可以尝试:

library(ggplot2)
#Data
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

#Keys
vals <- df[!duplicated(df$id),c('id','id_2')]
#Plot
ggplot(df, aes(x=date, y=reorder(id, fill_val), fill=fill_val)) +
  geom_tile()+
  scale_y_discrete(breaks=vals$id, 
                   labels=vals$id_2)
输出:


我不知道deframe升级+1@鸭子谢谢。当然也有tibble::enframe将命名向量转换为两列tibble。很高兴知道这一点!我不知道deframe升级+1@鸭子谢谢。当然也有tibble::enframe将命名向量转换为两列tibble。很高兴知道这一点!