问题描述
我可以控制 3 个 y 轴标签,但我也想控制 3 个 y 轴范围中的每一个。这可能吗?我试过“ylim”,但它似乎只接受一个范围。
另外,如果可能的话,我想将 y 轴刻度数字水平旋转,这样它们就不会相互重叠。
感谢您的任何意见!
library(zoo)
set.seed(42)
dat <- data.frame(date=seq.Date(as.Date("2020-12-01"),as.Date("2020-12-31"),"day"),x=runif(31,5000),y=runif(31,100),z=runif(31,20))
rownames(dat) <- dat[,1]
dat <- dat[,-1]
plot(as.zoo(dat),ylab=c("label1","label2","label3"))
plot(as.zoo(dat),"label3"),ylim=c(c(0,6000),c(0,150),50)))
解决方法
这里有几个问题:
- 请注意,这是从通用
plot.zoo
分派plot
-
as.zoo
应该是read.zoo
并且动物园对象中的索引不是行名称。有关动物园对象的更多信息,请参阅?zoo
和动物园vignette(package = "zoo")
附带的小插图,或在 zoo CRAN page 上找到它们的链接。请参阅?read.zoo
和vignette("zoo-read",package = "zoo")
以了解有关read.zoo
的更多信息。 - 通常,如果不覆盖变量,处理代码会更容易。下面我们使用
z
来表示动物园对象,而不是破坏原始数据。 - 要获得多个
ylim
集合,它们必须作为对列表传递。问题中的代码传递了一个包含 6 个值的简单向量。有关详细信息,请参阅?plot.zoo
。 - 添加
las=1
。有关详细信息,请参阅?par
。
更正,我们有
library(zoo)
set.seed(42)
dat <- data.frame(date = seq.Date(as.Date("2020-12-01"),as.Date("2020-12-31"),"day"),x = runif(31,5000),y = runif(31,100),z = runif(31,20))
z <- read.zoo(dat)
ylab <- c("label1","label2","label3")
ylim <- list(c(0,6000),c(0,150),50))
plot(z,ylab = ylab,ylim = ylim,las = 1)
给予:
,您可能想分别绘制三个数据,然后使用 patchwork 包来组合它们:
plot1 <- plot(...)
plot2 <- plot(...)
plot3 <- plot(...)
plot1 + plot2 + plot3 + patchwork::plot_layout(nrow = ...,ncol = ...)
因此,您可以为每个地块安排 ylim :
plot1 <- plot(...,ylim = c(0,6000))
plot2 <- plot(...,150))
plot3 <- plot(...,50))