r - 编辑 ggplot2 图的图例标签
问题描述
我有ggplotly
下面的图表,我想将图例的标签从值编辑color
到Range
值。
Cum<-data.frame(structure(list(Age.group = c("00-04", "00-04", "05-14", "05-14",
"15-24", "15-24", "25-49", "25-49", "50-64", "50-64", "65-79",
"65-79", "80+", "80+"), Gender = c("Female", "Male", "Female",
"Male", "Female", "Male", "Female", "Male", "Female", "Male",
"Female", "Male", "Female", "Male"), Cases = c(64578, 70518,
187568, 197015, 414405, 388138, 1342394, 1206168, 792180, 742744,
400232, 414613, 282268, 198026), lab = c("64,578", "70,518",
"187,568", "197,015", "414,405", "388,138", "1,342,394", "1,206,168",
"792,180", "742,744", "400,232", "414,613", "282,268", "198,026"
), Age.group.Sum = c(135096, 135096, 384583, 384583, 802543,
802543, 2548562, 2548562, 1534924, 1534924, 814845, 814845, 480294,
480294), lab2 = c("135,096", "135,096", "384,583", "384,583",
"802,543", "802,543", "2,548,562", "2,548,562", "1,534,924",
"1,534,924", "814,845", "814,845", "480,294", "480,294"), color = c("#4285f4",
"#4285f4", "#90a9e0", "#90a9e0", "#dd9e5f", "#dd9e5f", "#b45f06",
"#b45f06", "#b45f06", "#b45f06", "#dd9e5f", "#dd9e5f", "#aebbd6",
"#90a9e0"), Range = c("<= 74453.8555555556", "<= 74453.8555555556",
"148907.711111111 - 223361.566666667", "148907.711111111 - 223361.566666667",
"372269.277777778 - 446723.133333333", "372269.277777778 - 446723.133333333",
">= 670084.7", ">= 670084.7", ">= 670084.7", ">= 670084.7", "372269.277777778 - 446723.133333333",
"372269.277777778 - 446723.133333333", "223361.566666667 - 297815.422222222",
"148907.711111111 - 223361.566666667")), class = "data.frame", row.names = c(NA,
-14L)))
ggplot_obj <- ggplot(data = Cum, aes(x = `Age group`, y = Cases, group = Gender,fill = Range)) +
geom_bar(aes(
# Define a text object here that can be use for reference by ggplot_ly
# thought ggplot will throw a warning
text = paste("<b>Gender:</b>", Gender, "<br><b>Age:</b>", `Age group` ,
"<br><b>Cases:</b>", lab, "<br><b>Total cases in age group:</b>",
lab2)),
position = "dodge", stat = "identity") +
geom_text(aes(y = Cases + 10000, label = Gender), vjust = 1,
position = position_dodge(width=0.9),size=2) +
scale_fill_manual(values = mycols) +
coord_cartesian(ylim = c(0, max(Cum$Cases)*1.1), expand = FALSE) +
theme_bw()+ theme(
# remove the vertical grid lines
panel.grid.major.x = element_blank(),
panel.border = element_blank(), axis.line.x = element_line()
)+
scale_y_continuous(labels = paste0(ylab, "M"),
breaks = 10^6 * ylab)
#> Warning: Ignoring unknown aesthetics: text
# running ggplotly with tooltip option reference to the text defined in ggplot object
ggplotly(ggplot_obj, tooltip="text") %>%
config(modeBarButtonsToRemove = c('toImage', "zoom2d", "toggleSpikelines",
"hoverClosestCartesian", "hoverCompareCartesian", "drawline", "autoScale2d",
"resetScale2d", "zoomIn2d", "zoomOut2d", "pan2d", 'select2d', 'lasso2d')) %>%
config(displaylogo = FALSE)
解决方案
fill = Range
是你需要做的:
ggplot_obj <- ggplot(data = Cum, aes(x = `Age group`, y = Cases, group = Gender, fill = Range)) +
geom_bar(stat = "identity", position = "dodge",
text = paste("<b>Gender:</b>", Gender, "<br><b>Age:</b>", `Age group` ,
"<br><b>Cases:</b>", Cases, "<br><b>Total cases in age group:</b>",
`Age group`)) +
geom_text(aes(y = Cases + 10000, label = Gender), vjust = 1,
position = position_dodge(width=0.9)) +
scale_fill_manual(values = mycols) +
coord_cartesian(ylim = c(0, max(Cum$Cases)*1.1), expand = FALSE) +
theme_bw()
ggplotly(ggplot_obj, tooltip="text") %>%
config(modeBarButtonsToRemove = c('toImage', "zoom2d", "toggleSpikelines",
"hoverClosestCartesian", "hoverCompareCartesian", "drawline", "autoScale2d",
"resetScale2d", "zoomIn2d", "zoomOut2d", "pan2d", 'select2d', 'lasso2d')) %>%
config(displaylogo = FALSE)
注意:我fill = color
从 中删除,因为同时geom_bar
aes
拥有两者并没有意义。mycols
color
推荐阅读
- powershell - AzCopy 列表 - 如何在没有其他信息的情况下显示名称列表文件
- python - 有没有办法为井字游戏压缩我的 check_winner 代码?
- c# - 使用 .NET Core API 获取请求的原始来源
- json - 带有 list.lengh 参数的 setstate() 不起作用
- python - 从多索引熊猫数据框创建索引
- mysql - 如何在 MySQL 中存储 3D 点
- assembly - 在这个 x86-64 指令编码文档中,8、16、32、64 位 GPR 有什么用?
- kotlin - 如何从调用对象中获取 IP 地址
- python - 使用 Dask 读取不适合内存的数据
- python - .extend 运算符不可迭代的 Int 对象