【问题标题】:Make matplotlib colormap from numpy array从 numpy 数组制作 matplotlib 颜色图
【发布时间】:2013-06-27 18:09:29
【问题描述】:

我正在 matplotlib 上制作曲面图。我的轴是 x、y 和深度。我有一个具有 RGB 值的二维数组,索引对应于 (x,y) 坐标。如何从这个二维数组制作颜色图?谢谢。

生成 numpy 数组的代码:

import Image
import numpy as np
def makeImageArray(filename):
    img = Image.open(filename)
    a = np.array(img).astype("float32")
    return a

图像为灰度。

【问题讨论】:

  • 当您说您的 RGB 数组是 2d 时,您是否包括沿 RGB 的维度?也就是说,颜色是 1d 的 2d 像素数组,还是颜色 1d 的 1d 像素数组?
  • 我刚刚拍了一张照片,并将图像转换为二维 numpy 数组。我不确定你的问题在问什么,但如果我的问题写得不好,我很抱歉。
  • 只是技术性问题;如果你有一个普通的彩色图像,它实际上是 3d,因为它的shape 类似于(600,800,3) 对于三种颜色。灰度为(600,800)。听起来您的 RGB 阵列在技术上是 3d 的,因为它代表彩色的 2d 图像..
  • 这是我将其转换为数组的代码示例: import Image import numpy as np def convertToArray(filename): img = Image.open(filename) a = np.array(img) .astype("float32") return a 它刚刚以二维数组的形式出现。最大值为 255,最小值为 0,所以它是 RGB。这是一张未经处理的图片
  • 抱歉代码格式错误,但我在完成之前不小心发布了它,因为我是该网站的新手,所以我不知道新行是用 shift+enter 完成的,然后我没时间编辑它。但是,是的,它仍然是黑白颠倒的,如果这有助于显示它是多么未经处理的话。

标签: python numpy matplotlib


【解决方案1】:

根据我为每个点 (x,y) 收集的信息,您有两条信息,高度和颜色。您希望使用高度绘制曲面图,并根据每个位置的颜色进行着色。

虽然您可以轻松指定custom color maps,但我认为这对您没有帮助。 您正在考虑的与将(x,y)处的高度映射到颜色的颜色图不同。

结果在 Surface plots 示例here 中最为明显

我相信你想要的超出了 matplotlib 的范围,只能通过我怀疑你是否希望使用的某种 hack 来完成。

这里还是我的建议:

import pylab as py
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

X = np.arange(-5, 5, 0.1)
Y = np.arange(-5, 5, 0.1)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)

colorise = [((5.0 + X[i][i])/10.0, 0.5, 0.0) for i in xrange((len(X)))] 

ax = py.subplot(111, projection='3d')
for i in xrange(len(X)):
    ax.plot(X[i], Y[i], Z[i], "o", color=colorise[i])

py.show()

这会产生以下结果:

重要的是,这显示了一个 3D 表面,其颜色不依赖于高度(它是一个方向上的渐变)。最明显的问题是,为单个点着色会丢失 matplotlibs 表面,这使得 3d 绘图被称为 projection 的原因非常清楚!

对不起,这不是很有帮助,希望有更好的软件,或者我不知道 matplotlibs 的全部功能。

【讨论】:

  • 为此,您不需要显式循环。您链接到的页面上有 3d scatter,它接受与颜色关键字相同形状的数组。
猜你喜欢
  • 2020-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-24
  • 2017-05-08
  • 2012-06-13
  • 1970-01-01
相关资源
最近更新 更多