【问题标题】:Converting MATLAB 'imagesc' function to work with R's 'imagesc' from R's 'matlab' library将 MATLAB 'imagesc' 函数转换为使用 R'matlab' 库中的 R'imagesc'
【发布时间】:2013-06-05 10:19:32
【问题描述】:

我是 R 新手,之前使用过 MATLAB。我正在转换一个 MATLAB 脚本以在 R 下运行。到目前为止一切顺利,除了现在绘制输出图。

MATLAB

这是绘制图形的matlab代码,使用imagesc

imagesc(velocity,time,myplot,[-35, 0]);

地点:

velocity: 1 x 50 矩阵

time: 1 x 10 矩阵

myplot: 10 x 50 矩阵

图像说明

更多详情can be found here

imagesc(x,y,C) 将 C 显示为图像,并使用向量 x 和 y 指定 x 轴和 y 轴的边界。如果 x(1) > x(2) 或 y(1) > y(2),则图像分别左右翻转或上下翻转。如果 x 和 y 是标量,则将图像平移到指定位置 (x,y),使图像的左上角从 (x,y) 开始。

R

R 版本的imagesc which can be found here

问题:

如何在 Matlab clims 部分中将数据值重现为颜色图值,可在此处找到:http://i.imgur.com/eVy6V8N.png,这是 Matlab 示例的 [-35, 0] 部分。

它将特定范围之外的数据值映射到相同的颜色限制,有效地充当图像上的噪声过滤器。

这是 Matlab 和 R imagesc 函数的结果,没有 [-35, 0] clims 部分:http://i.imgur.com/DzDjrzu.png

如您所见,它们是相同的。

这是所需的结果,包括 Matlab [-35, 0] 部分:http://i.imgur.com/Qbx6jNI.png

Matlab 的左边和右边的 R。左边的 Matlab 图像是我想要生成的,这一切都归功于脚本的 Matlab 版本上的一个进程clims[-35, 0]

【问题讨论】:

  • 有少数 R 人可以使用 MATLAB,但不是很多。为什么不描述 imagesc 函数的实际作用呢?以及如何解释这些参数?
  • @Dwin 我已经用 imagesc 的解释编辑了我的原始问题
  • 这是“您要解决的问题是什么?”的一个很好的例子。你想要的是一个特定的图表,所以不要问如何让一个特定的工具产生那个图表:问如何从你的数据中得到想要的输出。
  • @CarlWitthoft 不,我真的只是希望该工具能够生成与 Matlab 使用的工具相同的工具。如果是这样,我们就不会在这里了 :) 我想如果你更具体,[-35, 0] 部分是我无法在 R 中重现的地方 - 从提供的链接中命名为 clims
  • 这里是i.imgur.com/eVy6V8N.png 部分,它将数据值映射到范围之外的颜色值。

标签: r matlab


【解决方案1】:

我认为您可以通过预处理数据来获得与clims 相同的效果,以便将范围之外的值压缩到范围限制。

z = matrix(rnorm(10*10, sd=3), 10)

z2 <- z
z2[z2 > 3] <- 3
z2[z2 < -5] <- -5

# or simply
z2 = scales::squish(z, c(-5, 3))

filled.contour(z)

filled.contour(z2)

【讨论】:

    【解决方案2】:

    当我阅读问题和链接材料以及通过 Google 找到的一些其他材料时,您需要 R 中 imageaxis 函数的组合容量。其他一些材料说 imagesc 真的只有重新标记轴注释。 (并且它具有一些您似乎不需要的额外颜色缩放能力。)从文件中读取图像可能需要一些额外的包。有一个grImport 包,具有​​对 pdf 有用的功能。还有一些专门针对特定格式的软件包,例如。 tiffrtiff。如果你有一个模式大小的矩阵要绘制,你应该提供dput(mat)。在没有示例和具体说明的情况下,可以在?image 的示例部分中间提供此示例的改编。

    > image(t(volcano)[ncol(volcano):1,])   # the default axes lebeling
    
     image(t(volcano)[ncol(volcano):1,], axes=FALSE)
     axis(1, at=seq(0,1,.1), labels= seq(0,100,10) )
     axis(2, at=seq(0,1,.1), labels= rev( seq(0,100,10)) )
    

    【讨论】:

    • 不幸的是,我必须使用imagesc,因为它具有clims 函数和[-35, 0] 对矩阵进行归一化的部分。我似乎无法找到如何在 R 版本上做到这一点。除非您知道如何规范化该范围 [-35, 0] 之间的矩阵。
    • >通过指定颜色值限制 (clims),您可以通过将低值映射到颜色图中的第一种颜色和将高值映射到最后一种颜色来扩展中等颜色分辨率。如果当前颜色图的大小为 81×3,则语句 >clims = [ 10 60 ] >imagesc(C,clims) >映射 C 中的数据值
    • 此部分:i.imgur.com/eVy6V8N.png,它将数据值映射到颜色值,特别是当它超出指定范围时
    • 您可以使用 xlim/ylim 翻转轴,只需 IYI image(x = seq(0, 100, length = ncol(volcano)), y = seq(0, 100, length = nrow(volcano) )), t(volcano)[ncol(volcano):1, nrow(volcano):1], ylim = c(100, 0), xlab = "", ylab = "")
    • @mdsummer 那么我在哪里将[-35,0] 数据映射替换为颜色映射值?
    猜你喜欢
    • 1970-01-01
    • 2013-12-27
    • 1970-01-01
    • 2014-03-05
    • 2013-05-13
    • 2016-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多