如何在 R 中的 ggplot2 中更改 geom_text 中的字体颜色?
Posted
技术标签:
【中文标题】如何在 R 中的 ggplot2 中更改 geom_text 中的字体颜色?【英文标题】:How to change font color in geom_text in ggplot2 in R? 【发布时间】:2017-05-23 08:11:59 【问题描述】:我正在使用 geom_bar 在 ggplot2 中生成一些基本的条形图。我希望在每个条形上方以相同颜色列出数字,并且我正在使用 geom_text。我正在使用scale_fill_manual(values = alpha(c("#000000", "#FF5733")))
填充这些条形图。我遇到的问题是条形上方的文本没有更改为自定义颜色。保留默认的 R 颜色。
library(ggplot2)
Area <- c("Option1", "Option2", "Option3")
Count <- c(193, 56, 4,240, 10, 25)
Type <- c("car", "car", "car", "bike", "bike", "bike")
p <- data.frame(Area, Count, Type)
ggplot(p, aes(x=Area, y=Count, color=Type)) +
geom_bar(stat="identity", position="dodge", aes(fill=Type), color="black") +
scale_fill_manual(values = alpha(c("#000000", "#FF5733"))) +
geom_text(aes(label=Count), position=position_dodge(width = 0.9), vjust=-0.40)
我尝试了以下方法无济于事:
在某一时刻,我决定如果我可以让文本变黑,我会接受它并继续前进,但是当我这样做时,定位失败并将两个文本居中以一个“选项”而不是保留文本在他们各自的栏上。
geom_text(aes(label=Count), color="black", position=position_dodge(width = 0.9), vjust=-0.40)
然后我尝试了这个:
geom_text(aes(label=Count, color=c("#000000", "#FF5733")), position=position_dodge(width = 0.9), vjust=-0.40)
我在此调整中收到以下错误:错误:美学必须是长度 1 或与数据相同 (6):标签、颜色、x、y
我认为这是因为有 6 个条形,但只指定了 2 种颜色。但是,当我再添加 4 次颜色时,它就离我想要的更远了。
我尝试发布图片,但我还没有足够的积分!对不起!
感谢您提供的所有帮助。我正在运行 RStudio:
R 版本 3.2.3 (2015-12-10) 平台:x86_64-apple-darwin13.4.0(64位) 运行于:OS X 10.11.6 (El Capitan) [1] ggplot2_2.1.0
和平。
【问题讨论】:
【参考方案1】:尝试将colour
选项添加到geom_text
美学映射,并将您的自定义颜色分配给Type
和scale_colour_manual
的两个因子水平
ggplot(p, aes(x=Area, y=Count, color=Type)) +
geom_bar(stat="identity", position="dodge", aes(fill=Type), color="black") +
scale_fill_manual(values = alpha(c("#000000", "#FF5733"))) +
geom_text(aes(label=Count, colour=Type),
position=position_dodge(width = 0.9),
vjust=-0.40) +
scale_colour_manual(values=c("#000000", "#FF5733"))
【讨论】:
这很好,解决了问题。我没想到要手动设置刻度颜色。以上是关于如何在 R 中的 ggplot2 中更改 geom_text 中的字体颜色?的主要内容,如果未能解决你的问题,请参考以下文章
如何更改 ggplot2 geom_raster 中的插值/平滑
R语言ggplot2可视化:为图像中的均值竖线中位数竖线 geom_vline添加图例(legend)
如何将使用 geom_label() 制作的标签的文本居中,其垂直位置已被 vjust 更改? (ggplot2 包)