R中柱状图的图例
我正在用R 做一个相对简单的条形图,数据如下:
# A tibble: 4 × 2
housing_density HOW_MANY
<int> <int>
1 1 276360784
2 2 9233474
3 3 11659386
4 4 1905698
我已经用这段代码创建了如下的条形图:
ggplot(data = sub_21_24_df) +
geom_bar(mapping = aes(x = housing_density, y = HOW_MANY, fill = housing_density), stat = "identity")
然而,表示Housing Density的 y轴数值对应的是描述性标签,而我希望在图例中体现这些标签。比如:1=农村,2=农村/郊区,3=郊区,4=城市。因此我并不需要图例显示1-4,而是用颜色编码的描述标签会更有帮助。
有没有办法手动实现?还是需要在tibble/数据框中更改名称以使图例反映这些描述?
解决方案
一个安全的选项是先把 housing_density 变成一个 factor,这在绘图时可以避免手动处理中的拼写错误。
sub_21_24_df$housing_density <-
factor(sub_21_24_df$housing_density,
labels=c('rural', 'rural/suburb', 'suburb', 'city')
)
这将得到:
> sub_21_24_df
housing_density HOW_MANY
1 rural 276360784
2 rural/suburb 9233474
3 suburb 11659386
4 city 1905698
在分配因子标签时要小心,因为它们是按照数值的字母顺序来分配的,而不是它们在列中出现的顺序,参见:
> (x <- c(4, 3, 1, 2))
[1] 4 3 1 2
> factor(x, labels=c('rural', 'rural/suburb', 'suburb', 'city'))
[1] city suburb rural rural/suburb
Levels: rural rural/suburb suburb city
然后再考虑可视化实际需要多少复杂性。我真的需要一个图例吗,还是可以把标签直接显示在条形下方?我真的需要不同的颜色吗,还是条形本身已经足够清晰地区分?在这里,使用 barplot 的极简解决方案:
png('myplot.png')
barplot(
sub_21_24_df$HOW_MANY/1e6,
col='black',
las=1, ## makes y-axis labels horizontal
ylab='Density (in millions)',
names.arg=sub_21_24_df$housing_density
)
dev.off()
由于问题明确是关于图例的,你可以使用以下方式添加一个图例:
png('myplot_legend.png')
barplot(
sub_21_24_df$HOW_MANY/1e6,
col=2:5,
las=1, ## makes y-axis labels horizontal
ylab='Density (in millions)',
names.arg=as.integer(sub_21_24_df$housing_density),
legend.text=sub_21_24_df$housing_density
)
dev.off()
如有需要,这在 ggplot2 中也应以类似方式工作,我就留给你来决定。
数据:
sub_21_24_df <- read.table(text=' housing_density HOW_MANY
1 1 276360784
2 2 9233474
3 3 11659386
4 4 1905698')
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。


