R ggplot2 x轴按数据框顺序排列及图例自定义问题咨询
修正后可运行代码
df <- data.frame(Feature = c(196, 176, 194), NISP = c(65.26548673, 64.09090909, 72.16494845), Bio = c(18.53298346, 10.68950428, 54.19047619), MNI = c(30, 35, 58)) # 解决x轴顺序问题:将Feature转为因子,保留数据框原有顺序 df$Feature <- factor(df$Feature, levels = df$Feature) library(ggplot2) Graph <- ggplot(df, aes(x=Feature)) + # 加group=1避免因子型x轴下折线无法正常显示 geom_line(aes(y = NISP, group = 1), color = "black") + geom_line(aes(y = MNI, group = 1), color = "black") + geom_line(aes(y = Bio, group = 1), color = "black")+ # shape映射直接绑定指标名称,方便后续自定义图例 geom_point(aes(y = NISP, shape="NISP"), size=2)+ geom_point(aes(y = MNI, shape="MNI"), size=2)+ geom_point(aes(y = Bio, shape="Biomass"), size=2) + # 手动指定形状取值和图例顺序 scale_shape_manual( values = c("NISP" = 16, "MNI" = 15, "Biomass" = 17), breaks = c("NISP", "MNI", "Biomass"), name = "指标类型" ) + ylab("Percentage") + ggtitle("Percent MNI, NISP, and Biomass") + # 替换FALSE为"none"解决弃用警告 guides(size = "none") Graph
问题解决说明
- 问题1(x轴顺序异常):你之前误把x轴的配置写到了控制形状图例的
scale_shape_manual里,所以会出现显示异常。原本Feature是数值类型,ggplot默认会按照数值大小从小到大排序,将其转为因子并指定levels为数据框的原始顺序,就能保留196→176→194的排序。额外增加的group=1参数是为了适配因子型x轴,保证折线可以正常渲染。 - 问题2(图例显示和警告问题):
- 原代码把shape映射为字符串"15""16""17",所以图例默认只会显示这三个值,你之前误用了控制填充色的
scale_fill_manual修改形状图例,自然无法生效。正确做法是直接将shape映射为指标名称,再通过scale_shape_manual的values参数绑定形状和对应名称,breaks参数可自定义图例的排列顺序。 - 新版本ggplot2已经弃用
guides(<scale> = FALSE)的写法,统一替换为guides(<scale> = "none")即可消除警告。
- 原代码把shape映射为字符串"15""16""17",所以图例默认只会显示这三个值,你之前误用了控制填充色的
内容的提问来源于stack exchange,提问作者72snoe
相关产品推荐
相关产品推荐

