【问题标题】:R: How to draw a level plot with log tick scalesR:如何用对数刻度绘制水平图
【发布时间】:2017-05-04 01:27:35
【问题描述】:

我想绘制一个 x 和 y 刻度为 log10 刻度的水平图。

例如,我有一个像这样的正常水平图。

x <- 10*1:nrow(volcano)
y <- 10*1:ncol(volcano)
filled.contour(x, y, volcano, color = terrain.colors, plot.title = title(main = "Volcano topolgy", xlab = "Meters North", ylab = "Meters West"), plot.axes = { axis(1, seq(100, 800, by = 100)); axis(2, seq(100, 600, by = 100)) }, key.title = title(main = "Height\n(meters)"), key.axes = axis(4, seq(90, 190, by = 10)))

但是,x 和 y 刻度不是对数刻度刻度。我找到了另一个具有对数刻度功能的库“latticeExtra”。例如,使用上面相同的 x 和 y,我可以绘制对数刻度,但不能填充轮廓数据。

library(lattice)
library(latticeExtra)
xyplot(y ~ x, scales = list(x = list(log = 10), y = list(log = 10)), xscale.components = xscale.components.log10ticks, yscale.components = yscale.components.log10ticks)

如何用对数刻度绘制水平图?我想稍后在水平图上绘制散点图作为日志位置。

提前致谢。

【问题讨论】:

    标签: r plot contour lattice levelplot


    【解决方案1】:

    这是使用latticelatticeExtra 的替代方法

    library(lattice)
    library(latticeExtra)
    
    xx <- 1:nrow(volcano)
    yy <- 1:ncol(volcano)
    
    levelplot(
      x = volcano,
      xlim = range(xx),
      ylim = range(yy),
      scales = list(x = list(log = 10), y = list(log = 10)),
      xscale.components = xscale.components.log10ticks,
      yscale.components = yscale.components.log10ticks
    )
    

    【讨论】:

      【解决方案2】:

      如果您想继续使用filled.contour,您可以直接对xy 数据进行日志转换,并使用自定义axis 语句相应地调整轴,但这不是很优雅(base::plot@987654329 @ 参数很遗憾在filled.contour 中没有做任何事情:

      x <- log(10*1:nrow(volcano))
      y <- log(10*1:ncol(volcano))
      filled.contour(x, y, volcano, color = terrain.colors, 
                     plot.title = title(main = "Volcano topolgy", 
                                        xlab = "Meters North", 
                                        ylab = "Meters West"), 
                     plot.axes = { axis(1, at = log(seq(100, 800, by = 100)), labels = seq(100, 800, by = 100)); 
                                                      axis(2, at = log(seq(100, 600, by = 100)), labels = seq(100, 600, by = 100)) }, 
                     key.title = title(main = "Height\n(meters)"), 
                     key.axes = axis(4, seq(90, 190, by = 10)))
      

      你也可以试试 ggplot2scale_y_log10()scale_x_log10() 是否适合你,请参阅 this question and answer

      【讨论】:

        猜你喜欢
        • 2012-09-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-19
        • 2021-06-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多