首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >相互重叠的水平条形图标签

相互重叠的水平条形图标签
EN

Stack Overflow用户
提问于 2016-09-13 14:08:08
回答 1查看 443关注 0票数 1

我正在使用一个数据集在水平方向上创建一个水平。类似于在R: How can I make a barplot with labels parallel (horizontal) to bars中提出的解决方案。

然而,我的水平条形图的Y轴上的标签数量有点太多(由于手头的问题),因此它们彼此重叠。

有没有一种方法可以保持条形图的仓位大小,并在条形图的水平方向上显示Y标签的子集?

谢谢,rajat

EN

回答 1

Stack Overflow用户

发布于 2016-09-13 22:41:34

这里有一种方法,我们可以使用nice solution将数据中的名称与空格交错:

生成一些数据

代码语言:javascript
复制
set.seed(123)
df1 <- data.frame(x = replicate(50, paste(sample(letters, 2, replace = T), collapse = '')),
                  y = sample(1:10, 50, replace = T), stringsAsFactors = FALSE)

使用名称的子集绘制条形图

代码语言:javascript
复制
barplot(df1$y, names.arg = c(rbind(df1$x, rep('', 50)))[1:50], horiz = T, las = 1)

主要的技巧是names.arg = c(rbind(df1$x, rep('',50)))[1:50]行。它会在数据中的名称之间留出空格。实际上,我们正在用空格替换一半的名称。

如果这还不够,我们可以定义一个函数,它接受一个由名称、x和多个m组成的向量来定义哪些值要替换为空格:

代码语言:javascript
复制
replace_multiple <- function(x, m){
    len_x <- length(x)
    index_to_replace <- seq(1, len_x, by = m)
    x[index_to_replace] <- ''
    return(x)
}

replace_multiple(letters[1:12], m = 2)
# ""  "b" ""  "d" ""  "f" ""  "h" ""  "j" ""  "l"
replace_multiple(letters[1:12], m = 3)
# ""  "b" "c" ""  "e" "f" ""  "h" "i" ""  "k" "l"
replace_multiple(letters[1:12], m = 4)
# ""  "b" "c" "d" ""  "f" "g" "h" ""  "j" "k" "l"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39463208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档