繁体   English   中英

在分组条形图 R 上旋转 X 轴标签 45 度

[英]rotate X axis labels 45 degrees on grouped bar plot R

如何在 R 中的分组条形图上将 X 轴标签旋转 45 度?

我已经尝试过这里建议的解决方案但得到了一些非常混乱的东西,标签似乎已添加多次(仅显示轴部分以保护数据隐私):在此处输入图片说明

这个解决方案(gridBase)对我来说也不成功,由于某种原因我收到以下错误:

“无法弹出顶级视口(网格和图形输出混合?)”

附注。 大多数人似乎在 R base 中推荐这个解决方案,但我也坚持这样做,因为我不明白他们指的是什么数据(我需要某种示例数据集来理解新的命令行......)。

这些解决方案是否不起作用,因为我的条形图是分组条形图? 或者它应该仍然有效? 欢迎任何建议,我已经被困了很长一段时间。 谢谢你。

[编辑] 根据要求,我添加了用于生成上面图片的代码(基于 text() 解决方案之一):

data <- #this is a matrix with 4 columns and 20 rows;
        #colnames and rownames are specified.
        #the barplot data is grouped by rows

lablist <- as.vector(colnames(data))

barplot(data, beside=TRUE, col=c("darkred","red","grey20","grey40"))
text(1:100, par("usr")[1], labels=lablist, srt=45, pos=1, xpd=TRUE)

我不是一个精通基本情节的人,所以也许我的解决方案不是很简单。 我认为在这里使用 ggplot2 更好。

在此处输入图片说明

def.par <- par(no.readonly = TRUE)

## divide device into two rows and 1 column 
## allocate figure 1  for barplot
## allocate figure 2 for barplot labels
## respect relations between widths and heights

nf <- layout(matrix(c(1,1,2,2),2,2,byrow = TRUE), c(1,3), c(3,1), TRUE)
layout.show(nf)

## barplot 
par(mar = c(0,1,1,1))
set.seed(1)
nKol <- 8  ## you can change here but more than 11 cols 
           ## the solution is not really readable
data <- matrix(sample(1:4,nKol*4,rep=TRUE),ncol=nKol)
xx <- barplot(data, beside=TRUE,
              col=c("darkred","red","grey20","grey40"))

## labels , create d ummy plot for sacles
par(mar = c(1,1,0,1))
plot(seq_len(length(xx)),rep(1,length(xx)),type='n',axes=FALSE)
## Create some text labels 
labels <- paste("Label", seq_len(ncol(xx)), sep = " ")
## Plot text labels with some rotation at the top of the current figure
text(seq_len(length(xx)),rep(1.4,length(xx)), srt = 90, adj = 1,
     labels = labels, xpd = TRUE,cex=0.8,srt=60,
     col=c("darkred","red","grey20","grey40"))

par(def.par)  #- reset to default

尝试第一个答案:

x <- barplot(table(mtcars$cyl), xaxt="n")
labs <- paste(names(table(mtcars$cyl)), "cylinders")
text(cex=1, x=x-.25, y=-1.25, labs, xpd=TRUE, srt=45)

但是在 text() 函数中将 cex=1 更改为 cex=.8 或 .6 :

text(cex=.6, x=x-.25, y=-1.25, labs, xpd=TRUE, srt=45)

在您发布的图片中,在我看来标签太大了。 cex 设置这些标签的大小。

我对分组条形图有同样的问题。 我假设您只想要每个组下面的一个标签。 我对此可能有误,因为您没有明确说明,但这似乎是因为您的标签在图像中重复。 在这种情况下,您可以使用 Stu 提出的解决方案,尽管在将变量提供给文本函数时必须将 colMeans 应用于 x 变量:

x <- barplot(table(mtcars$cyl), xaxt="n")
labs <- paste(names(table(mtcars$cyl)), "cylinders")
text(cex=1, x=colMeans(x)-.25, y=-1.25, labs, xpd=TRUE, srt=45)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM