R 在绘制 data.table 时忽略 xaxp

问题描述 投票:0回答:1
x = c(1, 2, 2, 3, 3, 3, 4, 4, 5)
x.tab = table(x)
plot(x.tab, xlim = c(0, 10), xaxp=c(0, 10, 10))

(不幸的是,我没有足够的声誉来发布图像,但收到的图表只有刻度线1到5,而不是预期的0到10)

为什么 R 忽略 xaxp?我知道我可以将 x 分解为 0:10 级(即添加 x = Factor(x,levels=0:10)),这将是解决方案,但为什么参数 xaxp 不能按预期工作?顺便问一下,如何在不使用复杂魔法的情况下从 x.tab 中提取频率作为向量?

r plot data.table
1个回答
0
投票

您可以通过运行

plot.table
来查看
graphics:::plot.table
方法的源代码。它在接近尾声时包含此内容:

        plot(x0, unclass(x), type = type, ylim = ylim, xlab = xlab, 
            ylab = ylab, frame.plot = frame.plot, lwd = lwd, 
            ..., xaxt = "n")
        localaxis <- function(..., col, bg, pch, cex, lty, log) axis(...)
        if (!isFALSE(list(...)$axes)) 
            localaxis(1, at = x0, labels = nx, ...)

因此您可以看到,对默认绘图方法的调用并未通过

xaxt = "n"
指定任何轴,然后它会在
x0
值处绘制带有刻度的轴,在本例中为值
1:5

这不是你想要的,所以你可以做的是要求它不要绘制轴,然后自己手动绘制它们,例如

x = c(1, 2, 2, 3, 3, 3, 4, 4, 5)
x.tab = table(x)
plot(x.tab, xlim = c(0, 10), axes = FALSE)
axis(1, xaxp=c(0, 10, 10))
axis(2)

创建于 2024-03-30,使用 reprex v2.1.0

另一种方法是将

x
设为级别 0 到 10 的因子,例如
x <- factor(x, levels = 0:10)
。然后
plot.table
几乎会做你想做的事,而不需要任何可选参数。 (它将包含零计数的点,上面的代码没有这样做。)

© www.soinside.com 2019 - 2024. All rights reserved.