【问题标题】:Plotting axes with different scales for one data set in R为 R 中的一个数据集绘制不同比例的轴
【发布时间】:2011-01-19 00:40:16
【问题描述】:

我在 R 中绘制了一个大型数据集,我希望在图表的每一侧都有一个轴以两种不同的比例显示数据。因此,例如,在左垂直轴上,我想直接绘制数据(例如 plot(y ~ x) ),在右轴上,我想对左轴进行线性缩放。 (例如绘图(y*20 ~ x)。

因此只会显示一个数据集,但轴会为这些数据点显示不同的含义。

我尝试了以下方法:

plot(x = dataset$x, y = dataset$y)
axis(4, pretty(dataset$y,10) )

这将正确打印与默认左轴具有相同比例的新右轴。 (基本上没用,但它有效)但是,如果我做出这个微小的改变:

plot(x = dataset$x, y = dataset$y)
axis(4, pretty(10*dataset$y,10) )

突然间,它拒绝添加我的新右轴。我怀疑这与 R 查看轴是否以某种方式与数据集匹配并在不匹配时拒绝它有关。如何让 R 忽略数据集,只打印我选择的任意轴?

【问题讨论】:

    标签: r statistics graph plot


    【解决方案1】:

    你所要求的并不总是正确的实践,但你可以通过par(new=TRUE)强制它:

    x <- 1:20
    plot(x, log(x), type='l') 
    par(new=TRUE)              # key: ask for new plot without erasing old
    plot(x, sqrt(x), type='l', col='red', xlab="", yaxt="n")
    axis(4)
    

    x 轴被绘制了两次,但是因为你有相同的 x 坐标,所以没有问题。第二个 y 轴被抑制并绘制在右侧。但是标签显示您现在正在混合到不同的级别。

    【讨论】:

    • 您也可以在第二次调用plot() 时使用参数axes=F 来抑制x 轴的双重绘图。
    【解决方案2】:

    R 似乎并没有拒绝你的斧头。你遇到了什么错误?您的命令将使刻度远离图表(因为它使用第一个轴来定位它们)。我认为您想要的是以下内容:

    > plot(x = dataset$x, y = dataset$y)
    > axis(4, at = axTicks(2), label = axTicks(2) * 10)
    

    【讨论】:

    • 这很完美,优雅地解决了我的问题。我的问题不是刻度线画错了,而是我需要重新标记它们
    • 所以 at=axTicks(2) 表示从绘图侧获取新的轴刻度=2;并且 label=axTicks(2)*10 表示从 'at' 刻度按 10 缩放创建标签。对吗?
    猜你喜欢
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-26
    • 1970-01-01
    相关资源
    最近更新 更多