【问题标题】:Visualising and rotating a matrix可视化和旋转矩阵
【发布时间】:2013-09-02 16:02:52
【问题描述】:

我正在尝试可视化大约 500x500 的上三角矩阵。除此之外,我还尝试旋转该图像,使其看起来像三角形指向上方:

(这是通过拍摄图形设备的快照然后旋转该图像来实现的)。

在该图像中,每一列和每一行都需要指定其宽度。

我曾尝试将image() 函数与grid 包一起使用(使用旋转45 度的视面板),但这不起作用。有人知道更好的解决方案吗?

【问题讨论】:

  • 'grid' 包中没有 image 函数。也许如果您从该数据中提取 10 x 10 部分并提供正在使用的代码,我们可以提供帮助。
  • 不太确定您想要可视化的数据是什么,但也许可以看看弧形图的概念? gastonsanchez.wordpress.com/2013/02/03/…
  • 道歉@DWin,我措辞不好。我的意思是我使用image() 函数形成基本图形,然后使用网格来拍摄图形设备的快照,然后使用grid 旋转和绘制它。 @h.l.m,我知道这些图表,但是最好以这种方式显示数据。

标签: r matrix visualization


【解决方案1】:

这是一种使用基本图形的简单而愚蠢的方法'rasterImage

plotTriMatrix <- function(x) {
  ## clear lower triangle
  x[lower.tri(x)] <- NA

  ## calculate diag
  nr <- nrow(x)
  nc <- ncol(x)
  d <- sqrt(nr^2 + nc^2)
  d2 <- 0.5 * d

  ## empty plot area
  plot(NA, type="n", xlim=c(0, d), ylim=c(0, d), xlab="", ylab="", asp=1)

  ## plot matrix and rotate 45
  rasterImage(as.raster(x),
              xleft=d2, xright=d2+nc, ybottom=-d2, ytop=-d2+nr,
              interpolate=FALSE, angle=45)
}

例子:

set.seed(123)
m <- matrix(runif(100), 10, 10)

plotTriMatrix(m)

【讨论】:

  • 这个例子效果很好,干杯。然而,每行和每列的宽度需要是可调整的。据我所知,您的示例仅从矩阵中创建了一个位图。
  • 好吧,既然image 函数“只创建一个位图”,我认为 sgibb 完全有权假设这是您想要的。
  • 实际上我明白@Jan 在说什么,该示例仅在绘图设备非常具体的尺寸下看起来是正确的,这与image 很不一样。 (plot 命令需要asp=1。)
  • @blmoore:感谢您的建议!我编辑我的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-08
  • 2022-01-16
  • 2011-05-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多