如何让R语言barplot的ylab「Hot dogs and buns (HBD) eaten」完整显示?
解决R语言barplot纵轴标签显示不全的问题
你在绘制内森热狗吃大赛(1980-2010)柱状图时,遇到了纵轴标签"Hot dogs and buns (HBD) eaten"无法完整显示的问题,以下是几种实用的解决办法:
方案1:调整绘图边距
基础绘图系统默认的左边距可能不足以容纳较长的纵轴标签,你可以通过par(mar)手动增大左侧边距:
# 调整边距,mar参数顺序为:下、左、上、右,默认是c(5,4,4,2)+0.1 par(mar = c(5, 6, 4, 2) + 0.1) # 再运行绘图代码 hotdogs <- read.csv("http://datasets.flowingdata.com/hot-dog-contest-winners.csv", sep=",", header = TRUE) fill_colors <- ifelse(hotdogs$New.record == 1, "#821122", "#cccccc") # 优化原循环代码 barplot(hotdogs$Dogs.eaten, names.arg = hotdogs$Year, main = "Nathan's Hot Dog Eating Contest Results, 1980 -2010", col=fill_colors, border = NA, space = 0.3, xlab = "Year", ylab = "Hot dogs and buns (HBD) eaten")
方案2:手动拆分纵轴标签
用\n把长标签拆分成多行,让标签自动换行显示,无需调整边距:
hotdogs <- read.csv("http://datasets.flowingdata.com/hot-dog-contest-winners.csv", sep=",", header = TRUE) fill_colors <- ifelse(hotdogs$New.record == 1, "#821122", "#cccccc") barplot(hotdogs$Dogs.eaten, names.arg = hotdogs$Year, main = "Nathan's Hot Dog Eating Contest Results, 1980 -2010", col=fill_colors, border = NA, space = 0.3, xlab = "Year", ylab = "Hot dogs and buns (HBD)\neaten")
方案3:改用ggplot2绘图(替代方案)
ggplot2会自动处理标签的显示空间,无需手动调整边距,代码更简洁:
library(ggplot2) hotdogs <- read.csv("http://datasets.flowingdata.com/hot-dog-contest-winners.csv", sep=",", header = TRUE) ggplot(hotdogs, aes(x = factor(Year), y = Dogs.eaten, fill = factor(New.record))) + geom_bar(stat = "identity", color = NA, width = 0.7) + scale_fill_manual(values = c("#cccccc", "#821122")) + labs(title = "Nathan's Hot Dog Eating Contest Results, 1980 -2010", x = "Year", y = "Hot dogs and buns (HBD) eaten") + theme(axis.text.x = element_text(angle = 45, hjust = 1)) # 可选:旋转年份标签避免重叠
额外提示:你原来生成颜色向量的循环可以用ifelse简化,代码更高效易读,上面的示例已经替换了这部分代码。
内容的提问来源于stack exchange,提问作者Tye N
相关产品推荐
相关产品推荐

