如何调整R语言绘图中图例项的顺序?(flav变量调整需求)
调整ggplot图表中
flav变量的顺序和大小问题 
我需要将默认图表scalesGraph001(基于数据框df(scaled001.dat))修改为图B,仅需调整flav变量的顺序和大小,但多次尝试后仍无法修改顺序。
该df的前十行结构如下:
structure(list(flav = c("c", "v", "c", "c", "v", "v", "c", "v", "c", "c"), top = c("c", "s", "n", "s", "c", "c", "n", "n", "c", "c"), syr = c(TRUE, FALSE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, TRUE, TRUE), weight = c(13.1, 14.4, 11.4, 8.7, 6.2, 12.6, 5.1, 12.8, 10.9, 6.5), cal = c(1293.1, 1460.5, 1202.2, 844.4, 552.9, 1259.4, 520.6, 1308.1, 1084.5, 649.8)), row.names = c(NA, 10L), class = "data.frame")
我当前使用的代码如下:
p1 <- scalesGraph001 + scale_size_manual(values = c('c' = 16,'s' = 12,'r' = 8, 'v' = 4)) + scale_fill_discrete(breaks = c('c', 's', 'r', 'v')) print(p1)
解决方法
要调整flav的显示顺序,核心是先把它转换成指定顺序的有序因子,再配合scale设置同步调整:
- 先修改数据中的
flav变量为有序因子,指定目标顺序:
df$flav <- factor(df$flav, levels = c("c", "s", "r", "v"), ordered = TRUE)
- 再调整图表的scale参数,确保size和fill的映射顺序与因子一致:
p1 <- scalesGraph001 + scale_size_manual(values = c('c' = 16,'s' = 12,'r' = 8, 'v' = 4), breaks = c("c", "s", "r", "v")) + scale_fill_discrete(breaks = c("c", "s", "r", "v")) print(p1)
说明
- 仅在scale中设置
breaks通常不生效,因为ggplot会优先遵循数据中变量的原始顺序,所以必须从数据层面修改flav的因子顺序,才能彻底改变图表中的显示顺序。 - 如果
scalesGraph001中是用flav映射了size和fill属性,修改因子顺序后,配合对应的scale设置就能同步实现顺序和大小的调整。
内容的提问来源于stack exchange,提问作者Tiancheng Liu
相关产品推荐
相关产品推荐

