涉及多数据集的ggplot图表如何添加区分各资产对应颜色的图例
ggplot2添加资产对应图例的解决方案
你当前的代码没有生成图例,是因为color参数写在了aes()映射之外,属于手动指定固定颜色,ggplot2不会将这类独立设置的样式纳入图例生成逻辑。你可以选择以下两种方案解决:
方案1:优先推荐(符合ggplot2语法规范)
先将多个资产的数据集合并为统一长表,再通过变量映射生成图例,后续维护更方便:
- 合并数据集
library(dplyr) library(ggplot2) # 为每个资产数据集添加标识列 Polkadot <- Polkadot %>% mutate(Asset = "Polkadot") Cardano <- Cardano %>% mutate(Asset = "Cardano") Solana <- Solana %>% mutate(Asset = "Solana") Tezos <- Tezos %>% mutate(Asset = "Tezos") Bitcoin <- Bitcoin %>% mutate(Asset = "Bitcoin") Basket <- Basket %>% mutate(Asset = "Basket") # 纵向合并所有数据 all_assets <- bind_rows(Polkadot, Cardano, Solana, Tezos, Bitcoin, Basket)
- 绘图代码
ggplot(all_assets, aes(x = Date, y = Price.Last, color = Asset)) + geom_line(size = 1.5) + # 匹配你原本设定的颜色对应关系 scale_color_manual(values = c( "Polkadot" = "blue", "Cardano" = "blue4", "Solana" = "cyan", "Tezos" = "cyan4", "Bitcoin" = "black", "Basket" = "deepskyblue" )) + theme_bw()
方案2:无需调整现有数据结构
直接在每个geom_line的aes()内定义颜色映射,手动绑定颜色和资产的对应关系:
ggplot() + geom_line(data = Polkadot, aes(x=Date, y=Price.Last, color="Polkadot"), size=1.5) + geom_line(data = Cardano, aes(x=Date, y=Price.Last, color="Cardano"), size=1.5) + geom_line(data = Solana, aes(x=Date, y=Price.Last, color="Solana"), size=1.5) + geom_line(data = Tezos, aes(x=Date, y=Price.Last, color="Tezos"), size=1.5) + geom_line(data = Bitcoin, aes(x=Date, y=Price.Last, color="Bitcoin"), size=1.5) + geom_line(data = Basket, aes(x=Date, y=Price.Last, color="Basket"), size=1.5) + # 自定义图例名称和颜色映射 scale_color_manual(name = "资产名称", values = c( "Polkadot" = "blue", "Cardano" = "blue4", "Solana" = "cyan", "Tezos" = "cyan4", "Bitcoin" = "black", "Basket" = "deepskyblue" )) + theme_bw()
内容的提问来源于stack exchange,提问作者marco
相关产品推荐
相关产品推荐

