如何在barplot中获取条形的x坐标
How to get the x-coordinate of bars in barplot
我正在尝试创建一个结合线图的条形图,但我无法将所有图形居中,因此它与 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()
您调用 par(new=TRUE)
时正在重置地块的坐标系。在现有条形图上绘制时,这会使新添加的元素不对齐。省略 par()
,而不是紧随其后的 plot()
,像在下一行中一样使用 lines()
。
例如,而不是这个:
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))
作为@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")
我正在尝试创建一个结合线图的条形图,但我无法将所有图形居中,因此它与 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()
您调用 par(new=TRUE)
时正在重置地块的坐标系。在现有条形图上绘制时,这会使新添加的元素不对齐。省略 par()
,而不是紧随其后的 plot()
,像在下一行中一样使用 lines()
。
例如,而不是这个:
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))
作为@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")