如何获取条形图中柱子的x坐标

3

我想创建一个条形图和线形图的组合,但是我无法将所有图表居中,以便它们与x轴匹配。我希望两个线形图的柱标签(必须进行审查;))和点都与x轴刻度对齐。

我真的不明白为什么x轴刻度与条形图正确居中,但其他所有东西都以如此奇怪的方式失去了居中(尽管我使用相同的变量x来定位它们两个)。

如何一起将它们居中?

这是我制作绘图所用的代码(它产生的图像在下面):

#### base sytem
par(mar = rep(4, 4))
barData <- con
y <- lineData <- CPL
z <- CPLmax
x <- barplot(barData, 
             axes = FALSE,
             col = "green", 
             xlab = "",
             ylab = "",
             ylim = c(0, max(con) * 1.1))
axis(1, at = x, labels = timeline)
axis(4, at = NULL)
par(new = TRUE)
plot(x = x, y = y, type = "b", col = "blue", axes = FALSE, xlab = "", ylab = "", ylim = c(0, max(CPL) * 1.1))
lines(x = x, y = z, type = "b", col = "red",  axes = FALSE, ylab = "", ylim = c(0, max(CPL) * 1.1))
axis(2, at = NULL)
text(x = x, y = 3, labels = barData, pos = 1 )
abline(v= x, col="purple")
print(x)
print(y)
box()

enter image description here

2个回答

4
作为对 @JTT 答案的替代方案 - 您可以像这样修复 xlim 参数:
con <- setNames(runif(12), seq(as.Date("2014-01-01"), as.Date("2014-12-31"), "month"))
xlim <- c(0, length(con)*1.25)
x <- barplot(con, col = "green", xlab = "", ylab = "", ylim = c(0, max(con) * 1.1), axes = FALSE, xlim = xlim)
par(new = TRUE)
plot(x = x, type = "b", y = runif(12), xlim = xlim, xlab = "", ylab = "", axes = FALSE)
abline(v = x, col = "red")

这绝对是太棒了。谢谢你。 - Przemysław Robert Wilk

1
当您调用par(new=TRUE)时,您正在重置绘图的坐标系。这会导致在现有条形图上绘制新添加的元素时出现对齐错误。省略par(),并在其后使用lines()而不是plot()。例如,改为:
d<-1:10
x<-barplot(d)
y<-d+rnorm(10)
par(new=TRUE)
plot(x, y, type="b")

宁愿这样做:

d<-1:10
x<-barplot(d)
y<-d+rnorm(10)
lines(x, y, type="b")

或者,如果需要在图表中为不同元素使用不同的轴,您可以考虑显式设置x轴范围,例如:
d<-1:10
x<-barplot(d, xlim=c(0,12))
y<-d+rnorm(10)
par(new=TRUE)
plot(x, y, type="b", xlim=c(0,12))

好的,我看到这确实将所有内容与x轴刻度对齐,这是很大的进步。然而问题在于,我需要将线图与条形图放在不同的比例尺上(相当于Excel的第二个轴)。这就是为什么我使用par(new=TRUE)的原因。有没有什么办法可以保留barplot的正确x坐标? - Przemysław Robert Wilk
我稍微编辑了一下回答,以便举个例子。 - user2357031

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接