R 如何在ggplot中按值对轴重新排序后更改轴文本
我试图制作一个ggplot,其中y轴上分类变量的顺序为1,由另一个变量的值重新排序,然后2,轴文本被交换为另一个值,其中给定级别的新标签可以有来自原始变量的多个对应值。以下是完成第一部分的可复制示例: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),
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。很高兴知道这一点!