R ggplot2绘制NMDS图时DF2图层geom_point的fill参数不生效问题
问题根源
你为DF2点图层指定的shape=18(实心菱形)属于无填充属性的基础形状,这类形状的颜色仅由colour参数控制,仅编号为21~25的带边框形状才支持fill(填充色)、colour(边框色)双参数设置,因此你当前写的fill = Order映射不会生效,点默认显示为黑色。
解决方案
方案1:更换为支持fill属性的形状(无需额外依赖包)
将DF2的点形状更换为21~25之间的数值即可,示例调整后的完整代码如下:
ggplot(DF1, aes(x = NMDS1, y = NMDS2)) + geom_point(aes(colour= Deep), size = 3.5, alpha=0.7) + scale_colour_manual(values = c("cyan4", "blue", "orange", "red", "darkgreen")) + # 替换shape为21(实心圆带边框),可根据喜好换成22/23/24/25 geom_point(data = DF2, aes(x=NMDS1, y=NMDS2, fill = Order), size = 2.5, alpha=0.7, shape=21, colour = "gray20") + scale_fill_manual(values = MyPalette20) + geom_segment(data = DF2, aes(x = 0, xend=NMDS1, y=0, yend=NMDS2), arrow = arrow(length = unit(0.25, "cm")), colour = "#CCCCCC", lwd=0.3, linetype="dashed")
如果不需要点边框,直接把colour = "gray20改成colour = NA即可。
方案2:保留shape=18,使用ggnewscale新建颜色标度
如果你坚持要用shape=18的菱形样式,由于第一层已经用colour参数映射了Deep字段,需要用ggnewscale包新增独立的颜色标度给DF2的点使用,代码调整如下:
首先安装加载包:
install.packages("ggnewscale") library(ggnewscale)
调整绘图代码:
ggplot(DF1, aes(x = NMDS1, y = NMDS2)) + geom_point(aes(colour= Deep), size = 3.5, alpha=0.7) + scale_colour_manual(values = c("cyan4", "blue", "orange", "red", "darkgreen")) + # 新增颜色标度,后续的colour参数会使用新的标度,不会和第一层冲突 new_scale_colour() + # 将fill改为colour,shape保留18 geom_point(data = DF2, aes(x=NMDS1, y=NMDS2, colour = Order), size = 2.5, alpha=0.7, shape=18) + # 把scale_fill_manual改为scale_colour_manual scale_colour_manual(values = MyPalette20) + geom_segment(data = DF2, aes(x = 0, xend=NMDS1, y=0, yend=NMDS2), arrow = arrow(length = unit(0.25, "cm")), colour = "#CCCCCC", lwd=0.3, linetype="dashed")
内容的提问来源于stack exchange,提问作者abraham
相关产品推荐
相关产品推荐

