如何在ggplot中自定义Y轴刻度为车型名称?
解决Y轴刻度替换为车型名称的方案
核心思路
要将Y轴的数值刻度替换为车型名称,需先建立year1的排名与车型的对应关系(匹配你希望左侧year1对应车型的需求),再将该映射关系应用到Y轴刻度标签上。
修改后的完整代码
# 加载所需包 library(dplyr) library(tidyr) library(ggplot2) library(COINr) library(tibble) # 数据处理(保留原逻辑) df= mtcars %>% select(mpg,disp,wt,qsec) %>% rownames_to_column("car") %>% slice_head(n = 10) %>% remove_rownames() %>% rename(car=1, 'year1'=2, 'year2'=3, 'year3'=4, 'year4'=5) %>% COINr::rank_df() %>% pivot_longer(cols = -car, names_to = "year", values_to = "rank") %>% arrange(car, year) # 获取year1的排名-车型映射(按rank升序,对应Y轴从上到下的顺序) year1_rank_car <- df %>% filter(year == "year1") %>% arrange(rank) %>% pull(car) # 定义颜色向量(保留原设置) my_colors <- c("#1b9e77", "#d95f02", "#7570b3", "#e7298a", "#66a61e", "#e6ab02", "#a6761d", "#666666", "#e78ac3", "#984ea3") # 绘图(关键修改Y轴刻度标签) ggplot(df, aes(x = year, y = rank, group = car, color = car)) + geom_line(size = 2) + geom_point(size = 6) + geom_text(aes(label = rank), vjust = 0.6, size = 3.5, color = 'white') + labs(x='年份', y='')+ scale_color_manual(values = my_colors) + scale_y_reverse(breaks = 1:length(year1_rank_car), labels = year1_rank_car) + theme( legend.title = element_blank(), legend.position = 'bottom', axis.text.y = element_text(hjust = 1) # 可选:调整Y轴标签对齐,避免长名称截断 )
效果说明
- Y轴刻度直接对应year1的排名车型:最上方是year1排名第1的车型,向下依次对应排名靠后的车型
- 左侧year1的点精准对齐对应车型的Y轴位置,右侧year4的点展示该车型在year4的排名变化,可直观对比两年的排名差异
- 若车型名称过长,可在
axis.text.y中添加angle = 45参数调整标签角度,避免重叠
内容的提问来源于stack exchange,提问作者Ghose Bishwajit
相关产品推荐
相关产品推荐

