如何在ggplot2条形图中按指定顺序排列条形?
调整ggplot2分面条形图的条形顺序
你当前的ggplot2分面条形图中,条形默认按字符顺序排列,需要将其调整为MD_5NM_WATER、MD_10NM_WATER、MD_15NM_WATER、benchMEM的顺序,可通过以下方式实现:
核心思路
将specie列转换为**因子(factor)**并指定自定义的水平顺序,同时同步调整填充颜色的对应关系,确保每个类别颜色匹配。
修改后的完整代码
# 读取数据 data <- read.csv("test2.csv", stringsAsFactors=FALSE, header=TRUE) # 自定义specie的目标顺序,转换为因子(注意字符串需与数据中完全一致) target_order <- c( "gmx mdrun -s MD_5NM_WATER.tpr -nsteps 10000 ", "gmx mdrun -s MD_10NM_WATER.tpr -nsteps 10000 ", "gmx mdrun -s MD_15NM_WATER.tpr -nsteps 10000 ", "gmx mdrun -s benchMEM.tpr -nsteps 10000" ) data$specie <- factor(data$specie, levels = target_order) # 绘制分面条形图 facet_plot <- ggplot(data, aes(x = specie, y = value, fill = specie)) + geom_bar(stat = "identity", position = "dodge") + # 颜色顺序与target_order一一对应 scale_fill_manual( values=c("#fc8d59", "#fee08b", "#d53e4f", "#3288bd"), labels = c("MD_5NM_WATER", "MD_10NM_WATER", "MD_15NM_WATER", "benchMEM") # 可选:简化图例标签 ) + ylab("Performance (ns/day) on Tesla P100")+ facet_grid(. ~ condition, switch="both") + theme( plot.title = element_text(hjust = 0.5), axis.title.y = element_text(face="bold", colour="black", size = 12), legend.title = element_text(face="bold", size = 10), panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.ticks.x=element_blank(), axis.title.x = element_blank(), axis.text.x=element_blank(), strip.background = element_rect(fill="grey", colour="black", size=1), strip.text = element_text(face="bold", size=rel(1.2)) ) # 调用绘图并调整图例、y轴范围 facet_plot + guides(fill=guide_legend(title="GROMACS command")) + scale_y_continuous(expand = c(0,0), limits = c(0,460))
关键说明
- 因子的
levels必须与数据中specie的字符串完全匹配(包括空格),否则会出现类别缺失或排序错误 scale_fill_manual的颜色顺序需和target_order对应,保证每个类别的颜色不变- 若觉得图例标签过长,可通过
labels参数简化显示内容
内容的提问来源于stack exchange,提问作者anikaM
相关产品推荐
相关产品推荐

