如何在ggplot2的geom_bar中自定义轴刻度:月份名与斜体表达式
解决方案
当然可以实现这两个自定义需求,下面是修改后的完整代码以及关键步骤说明:
完整代码
library(tidyverse) x <- 1:12 z1 <- c("m", "m", "m", "m", "m", "n", "n", "n", "n", "n", "n", "n") z2 <- c("m", "m", "m", "m", "p", "p", "p", "p", "n", "n", "n", "n") z3 <- c("m", "m", "m", "p", "p", "p", "n", "n", "n", "n", "n", "n") df <- data.frame(x, z1, z2, z3) colors <- c("m" = "#f8766d", "n" = "#00BA38", "p" = "#619CFF") df_long <- pivot_longer(df, cols = c("z1", "z2", "z3"), names_to = "variable", values_to = "value") df_long$value <- factor(df_long$value, levels = c("m", "n", "p")) ggplot(df_long, aes(x = variable, fill = value)) + geom_bar(position = position_stack(reverse = TRUE)) + # 自定义翻转后的Y轴刻度为斜体表达式 scale_y_discrete(labels = expression(italic(z(t,1)), italic(z(t,2)), italic(z(t,3)))) + # 自定义翻转后的X轴刻度位置与标签 scale_x_continuous(breaks = c(1, 5, 9), labels = c("Jan", "Feb", "Mar")) + # 应用预设的自定义颜色 scale_fill_manual(values = colors) + coord_flip()
关键修改说明
X轴刻度替换
由于coord_flip()会交换X/Y轴,原堆叠条形的长度轴(计数轴)会变为翻转后的X轴。通过scale_x_continuous()指定刻度位置breaks = c(1,5,9),并对应设置标签labels = c("Jan", "Feb", "Mar")即可完成替换。Y轴斜体表达式刻度
翻转后的Y轴对应原数据的variable列(z1/z2/z3),使用scale_y_discrete()配合expression()函数生成斜体数学表达式标签,italic()函数负责实现文本斜体效果,直接编写z(t,1)这类格式就能满足需求。补充自定义颜色应用
你定义的colors向量需要通过scale_fill_manual(values = colors)应用到图表中,才能让不同类别显示预设的颜色。
内容的提问来源于stack exchange,提问作者user21189481
相关产品推荐
相关产品推荐

