【问题标题】:R: plot() is ignoring xlimR: plot() 忽略 xlim
【发布时间】:2022-06-10 17:05:42
【问题描述】:

我不是一个重度 r 用户,如果我通常使用 ggplot2,这在这种情况下是不容易实现的。

当我从第 3 方库生成的模型创建图时,即使我明确设置了 x 轴限制,生成的图也会有不同的 x 轴限制

plot(model, 
    col = TRUE, 
    pch = 20:25, 
    xlab = "x", 
    ylab = "y", 
    xlim = c(0.0001, 100), 
    ylim = c(0, 200), 
    broken = FALSE,
    main = "My Plot,
    axes = FALSE    
)

axis(side = 1, at = c(1, 10, 100))
axis(1, at=0.1, labels="0.1", tck= -0.04)
axis(1, at=0.01, labels="0.01", tck= -0.04)
axis(1, at=0.001, labels=parse(text="10^-3"), tck= -0.04)
axis(1, at=0.0001, labels=parse(text="10^-4"), tck= -0.04)

axis(2, at=0, labels="0", tck= -0.04, las=1)
axis(2, at=50, labels="50", tck= -0.04, las=1)
axis(2, at=100, labels="100", tck= -0.04, las=1)

根据模型,绘图并不总是从 0.0001 开始,而是从 0.001 或 0.1 开始

无论输入如何,我怎样才能强制尊重 xlim?

【问题讨论】:

  • 由于plot 是一个通用函数,第三方包的作者将为model 的任何类编写一个绘图方法。除非您告诉我们 model 是什么类型的对象,否则无法说明如何解决此问题,因为该方法可以做任何事情(例如专门忽略 xlim)。您能否提供一个最小的可重现示例?谢谢。
  • 模型来自使用drm功能的drc包。数据是相关的,不能共享。不确定我能否为可运行的示例生成“合理”的假数据。
  • 软件包帮助文件中给出的示例怎么样?他们使用包中包含的数据集 - 请参阅 ?ryegrass - 你不能用它做一个可重复的例子吗?
  • 另外,您需要在"My Plot 之后关闭引号"
  • 正如@Allan Cameron 所说drc 包有它自己的plot.drc 实现,所以如果你坚持use plot.default 取消你的drc 对象分类并处理它的内容,请使用unclass(obj)

标签: r plot


【解决方案1】:

当您运行plot(model) 时,您正在调用通用函数plot。泛型函数检查其第一个参数的“类”属性,然后为该类分派特定方法。在您的示例中,model 属于“drc”类,因此用于绘图的函数是drc:::plot.drc

如果我们检查源代码,我们会发现它包含一个add 参数。这为我们提供了一个解决方案 - 即,我们创建一个具有正确轴限制的标准空图,然后使用add = TRUE

绘制我们的模型

这是一个使用包中包含的ryegrass 数据集的工作示例:

library(drc)

data(ryegrass)

model <- drm(rootl ~ conc, data = ryegrass, fct = W2.4())

现在用我们想要的 x 和 y 限制绘制一个空图,但将 x 轴留空:

plot(1, xlim = c(0.0001, 100), ylim = c(0, 10), log = "x", type = "n",
     xaxt = "none")

现在我们可以添加绘图和轴了:

plot(model, add = TRUE,
    col = TRUE, 
    pch = 20:25, 
    broken = FALSE,
)

axis(side = 1, at = c(1, 10, 100))
axis(1, at=0.1, labels="0.1", tck= -0.04)
axis(1, at=0.01, labels="0.01", tck= -0.04)
axis(1, at=0.001, labels=parse(text="10^-3"), tck= -0.04)
axis(1, at=0.0001, labels=parse(text="10^-4"), tck= -0.04)

reprex package (v2.0.1) 于 2022 年 6 月 10 日创建

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-25
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 2016-02-12
    相关资源
    最近更新 更多