如何修复基本 R 条形图中缺少的标签

Posted

技术标签:

【中文标题】如何修复基本 R 条形图中缺少的标签【英文标题】:How to fix missing labels in base R barplot 【发布时间】:2019-11-08 03:24:13 【问题描述】:

您好,我试图绘制员工人数的条形图,但是 x 轴上的一些标签丢失了。如何解决这个问题

> dput(dat)
structure(list(Name = c("John", "Jacky", "Jill", "Sam", "Arthur", 
"Aaron", "Jacob", "Joseph", "Martin", "Alan", "Albert", "Clare", 
"Frederick", "Florence", "David", "George", "Michael", "Doughlas", 
"Andrew", "Brian"), Clinc = c("DMMTC", "DMMTC", "DMMTC", "DMMTC", 
"CKDMTC", "CKDMTC", "CKDMTC", "CKDMTC", "Warfarin MTC", "Warfarin MTC", 
"Warfarin MTC", "Warfarin MTC", "Respiratory MTC", "Respiratory MTC", 
"QSC", "QSC", "QSC", "Pain MTC", "Pain MTC", "Pain MTC")), row.names = c(NA, 
-20L), class = c("tbl_df", "tbl", "data.frame"))

summary(dat)

head(dat)


counts <- table(dat$Clinc)
barplot(counts, main="Placements",
        xlab="number of staffs",)

【问题讨论】:

点击缩放按钮怎么样? 【参考方案1】:

Anandapadmanathan,这对绘图窗口的实际大小很敏感。如果将其扩大到更大的尺寸,您应该会看到所有标签。由于重叠的文本框,有些可能会被隐藏。例如,这是您的代码,但绘图窗口更宽。

不幸的是,虽然我没有一个简单的方法来解释为什么一个或多个名字从你的情节中“丢失”,但你可以任意添加标签。

首先,您知道barplot 返回每​​个条形中心的X 值吗?奇怪的是,它们不是整数:

bp <- barplot(counts, main="Placements", xlab="number of staffs")
bp
#      [,1]
# [1,]  0.7
# [2,]  1.9
# [3,]  3.1
# [4,]  4.3
# [5,]  5.5
# [6,]  6.7

我们可以使用这些来手动放置一些文本

从一个过于狭窄的情节开始:

# left, unchanged
bp <- barplot(counts, main="Placements", xlab="number of staffs")

我们可以手动添加一些文本。为此,要知道xpd=NA 允许我们将文本(和点)放在正常绘图窗口之外。此外,adj= 是“x 对齐”和“y 对齐”的向量,其中 0.5 居中,在这种情况下,-4 是“向下颠簸大约 4 个高度”。你需要玩这个才能得到你想要的。 (有关xpd 的帮助,请参阅?par,有关adj 的帮助,请参阅?text。)

# middle, just for testing
bp <- barplot(counts, main="Placements", xlab="number of staffs")
text(bp, 0, names(counts), xpd = NA, adj = c(0.5, 4), col = "red")

最后,由于我们现在可以看到省略了第 2 个和第 5 个标签,因此我们可以针对这些标签。

# right, fixed
bp <- barplot(counts, main="Placements", xlab="number of staffs")
text(bp[c(2,5)], 0, names(counts)[c(2,5)], xpd = NA, adj = c(0.5, 4), col = "red")

完美吗?不,它漂亮吗?也许不是。但这可以让你重新获得你失去的东西。 (我个人觉得改变 x-labels 的高度可能是一件好事,尤其是当其中一些比你想要的更宽时。)

【讨论】:

【参考方案2】:

以下是处理标签不显示的其他四种方法:

    使标签文本变小:

    barplot(counts, main="Placements", xlab="number of staffs", cex.names=.7)
    

    改变绘图窗口的大小:

    dev.new(width=10, height=6)
    barplot(counts, main="Placements", xlab="number of staffs")
    

    通过增加左边距来使用水平条形图:

    oldp <- par(mar=c(5.1, 8.1, 2.1, 1.1))
    barplot(counts, main="Placements", xlab="number of staffs", horiz=TRUE, las=1)
    par(oldp)
    

    增加下边距并以一定角度绘制文本:

    out <- barplot(counts, main="Placements", names.arg="")
    title(xlab="number of staffs", line=4)
    text(out, rep(-.1, 6), names(counts), srt=45, pos=2, xpd=NA, cex=.75)
    

【讨论】:

以上是关于如何修复基本 R 条形图中缺少的标签的主要内容,如果未能解决你的问题,请参考以下文章

R语言 条形图

R语言 条形图

R语言 图表

R:如何在 ggplot 条形图中的右轴上添加标签?

R语言ggplot2可视化堆叠的条形图(stacked bar plot)并在每一个条形图的的中间添加对应的数值值标签定位在geom_col堆叠的条形图中的每个条形段的中间

R 具有两个因子变量的堆积百分比条形图 - 如何在图中标记百分比,而不计算 NA?