R base plot() 函数:我可以控制 R base 中这 3 个绘图的 y 轴范围和 y 轴刻度数方向吗?
R base plot() function: Can I control the y-axis ranges and y-axis tick number orientation for each of these 3 plots in R base?
我可以控制 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,0,5000),
y=runif(31,0,100),
z=runif(31,0,20))
rownames(dat) <- dat[,1]
dat <- dat[,-1]
plot(as.zoo(dat), ylab=c("label1","label2","label3"))
plot(as.zoo(dat), ylab=c("label1","label2","label3"), ylim=c(c(0,6000),c(0,150),c(0,50)))
click here to see example
您可能想单独绘制三个数据,然后使用包 patchwork 到 assemble 它们:
plot1 <- plot(...)
plot2 <- plot(...)
plot3 <- plot(...)
plot1 + plot2 + plot3 + patchwork::plot_layout(nrow = ..., ncol = ...)
因此,您可以为每个地块安排 ylim :
plot1 <- plot(..., ylim = c(0,6000))
plot2 <- plot(..., ylim = c(0,150))
plot3 <- plot(..., ylim = c(0,50))
这里有几个问题:
- 请注意,这是从通用
plot
调度 plot.zoo
as.zoo
应该是 read.zoo
并且 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, 0, 5000),
y = runif(31, 0, 100),
z = runif(31, 0, 20))
z <- read.zoo(dat)
ylab <- c("label1", "label2", "label3")
ylim <- list(c(0, 6000), c(0, 150), c(0, 50))
plot(z, ylab = ylab, ylim = ylim, las = 1)
给予:
我可以控制 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,0,5000),
y=runif(31,0,100),
z=runif(31,0,20))
rownames(dat) <- dat[,1]
dat <- dat[,-1]
plot(as.zoo(dat), ylab=c("label1","label2","label3"))
plot(as.zoo(dat), ylab=c("label1","label2","label3"), ylim=c(c(0,6000),c(0,150),c(0,50)))
click here to see example
您可能想单独绘制三个数据,然后使用包 patchwork 到 assemble 它们:
plot1 <- plot(...)
plot2 <- plot(...)
plot3 <- plot(...)
plot1 + plot2 + plot3 + patchwork::plot_layout(nrow = ..., ncol = ...)
因此,您可以为每个地块安排 ylim :
plot1 <- plot(..., ylim = c(0,6000))
plot2 <- plot(..., ylim = c(0,150))
plot3 <- plot(..., ylim = c(0,50))
这里有几个问题:
- 请注意,这是从通用
plot
调度 as.zoo
应该是read.zoo
并且 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
。
plot.zoo
更正,我们有
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, 0, 5000),
y = runif(31, 0, 100),
z = runif(31, 0, 20))
z <- read.zoo(dat)
ylab <- c("label1", "label2", "label3")
ylim <- list(c(0, 6000), c(0, 150), c(0, 50))
plot(z, ylab = ylab, ylim = ylim, las = 1)
给予: