barplot xlim shift轴 - >偏移到轴=缺少中点

时间:2017-03-30 08:08:39

标签: bar-chart axis offset

我有以下问题 - 它纯粹是一个禁欲主义者,但令我困扰的是它看起来并不好看: 我在条形图的底部生成了一个简单的横向条形图。默认设置生成的x轴比我的条形图短(图1)。为了解决这个问题,我加入了xlim。一旦我这样做,x轴稍微向左移动,因此y轴接触条形(图2)。这看起来并不好看。我猜xlim以某种方式覆盖默认参数,但我找不到哪个。我会很感激任何建议!

rm(list=ls())


data<-c(69,500,597)
names(data)<-c("text1", "text2", "text3")

midpoints<-barplot(data, beside=T, space=1, xlim=c(0,600))

filename=paste("orig.pdf", sep="")
pdf(file=filename, width=10, height =5)

par(mar=c(4,9,1,4))
barplot(data, beside=T, xlab=expression(paste("Text")), 
        axes=T, cex.lab=2, cex.axis=2, cex.names=2,  font.axis = 2,
        col=c("grey"),  horiz=T, las=1, font.lab=2,  space=1, 
        names.arg=colnames(data))
axis(side = 2, at = midpoints , labels = F, cex.axis=1.5)


dev.off()

filename=paste("with_limit.pdf", sep="")
pdf(file=filename, width=10, height =5)

lim<-c(0,600)
par(mar=c(4,9,1,4))
barplot(data, beside=T, xlab=expression(paste("Text")), 
        axes=T, cex.lab=2, cex.axis=2, cex.names=2,  font.axis = 2,
        col=c("grey"),  horiz=T, las=1, font.lab=2,  space=1, 
        names.arg=colnames(data), xlim=lim)
axis(side = 2, at = midpoints , labels = F, cex.axis=1.5)


dev.off()

图1 enter image description here 图2 enter image description here

1 个答案:

答案 0 :(得分:0)

与此同时,我确实找到了两个可能的答案,既不完美又有效。 第一个是使用xaxs =“r”,但根据我的口味,偏移量太大了。

filename=paste("solution1.pdf", sep="")
pdf(file=filename, width=10, height =5)

lim<-c(0,600)
par(mar=c(4,9,1,4))
barplot(data, beside=T, xlab=expression(paste("Text")), 
        axes=T, cex.lab=2, cex.axis=2, cex.names=2,  font.axis = 2,
        col=c("grey"),  horiz=T, las=1, font.lab=2,  space=1, 
        names.arg=colnames(data), xlim=lim, xaxs="r")
axis(side = 2, at = midpoints , labels = F, cex.axis=1.5)


dev.off()

Solution1

第二个选项是让xlim以负数开始。这具有手动调整偏移的缺点。在我的情况下,我有多个数字,我希望它总是相同,所以我使用(这里)最大600的2% - &gt; 12.对于所有其他人,我也使用了最大值的2%。这最终很有效。

filename=paste("solution2.pdf", sep="")
pdf(file=filename, width=10, height =5)

lim<-c(-12,600)
par(mar=c(4,9,1,4))
barplot(data, beside=T, xlab=expression(paste("Text")), 
        axes=T, cex.lab=2, cex.axis=2, cex.names=2,  font.axis = 2,
        col=c("grey"),  horiz=T, las=1, font.lab=2,  space=1, 
        names.arg=colnames(data), xlim=lim)
axis(side = 2, at = midpoints , labels = F, cex.axis=1.5)


dev.off()

Solution2