在R的ggplot2中,如何将一列映射为fill美学并指定另一列填充色?
解决ggplot中按Client映射fill并使用自定义HexColor的问题
要实现fill美学映射到Client列(图例显示Client名称),同时填充色取自对应的HexColor列,核心是手动指定Client与HexColor的映射关系,具体步骤如下:
步骤1:提取Client与HexColor的唯一对应关系
因为每个Client对应唯一的HexColor,先从数据中提取这种对应关系并转为命名向量:
# Base R 写法 color_map <- setNames(unique(mydata$HexColor), unique(mydata$Client)) # 或 dplyr 写法(需加载dplyr包) library(dplyr) color_map <- mydata %>% distinct(Client, HexColor) %>% deframe()
步骤2:绘制柱形图
将fill映射到Client,再通过scale_fill_manual()指定自定义颜色映射:
ggplot(data = mydata) + geom_col(mapping = aes(x=YearMonth, y=Sales, fill=Client)) + scale_fill_manual(values = color_map)
为什么之前的方法不适用?
- 第一种方法直接映射
fill=Client,ggplot会使用默认配色方案,无法匹配自定义HexColor; - 第二种方法映射
fill=HexColor,虽然颜色正确,但图例显示的是十六进制码而非Client名称,不符合需求。
内容的提问来源于stack exchange,提问作者Luiz
相关产品推荐
相关产品推荐

