如何设置ggplot2中aes()映射时也生效的point点形默认值
问题原因
update_geom_defaults()仅会修改未将美学属性绑定到变量时的geom静态默认值。当你在aes()中为shape指定映射关系时,ggplot2会自动调用离散shape标度的默认取值序列生成图形和图例,这部分默认值不受update_geom_defaults控制,才会出现两种场景点形不一致的问题。
解决方法
方法1:单次绘图生效
在做了shape映射的绘图代码后追加scale_shape_manual(),手动指定点形取值即可:
ggplot(data = DF, aes(x = X, y = Y)) + geom_point(aes(shape = "Legend label")) + # 单个分类直接传对应点形,多个分类时传入等长的点形向量即可 scale_shape_manual(values = 17)
方法2:全局配置一次生效,所有场景均适配
在初始加载ggplot2时同时修改geom静态默认值和离散shape标度的全局默认序列:
library(ggplot2) # 适配无shape映射的场景 update_geom_defaults("point", list(shape = 17)) # 适配有shape映射的场景,可自定义整个序列的点形顺序 options(ggplot2.discrete.shape = c(17, 16, 15, 18, 3, 4, 8, 9))
配置完成后你给出的两段测试代码都会输出shape为17的点,映射生成的图例也会和预设点形保持一致。
内容的提问来源于stack exchange,提问作者Daniel Valencia C.
相关产品推荐
相关产品推荐

