【问题标题】:How can I draw a points with a normalized color in matplotlib?如何在 matplotlib 中绘制具有标准化颜色的点?
【发布时间】:2019-05-10 21:19:42
【问题描述】:

我有以下代码:

x = range(1, 100) # pixel x coordinates
y = range(21, 120) # pixel y coordinates
z = [-2, 5, 1, ..., 1] # should be mapped to colors

import matplotlib.pyplot as plt
import matplotlib.cm as cm
from matplotlib.colors import Normalize

cmap = cm.autumn
norm = Normalize(vmin=min(z), vmax=max(z))
colormap = cmap(norm(5))
plt.plot(x, y, cm=colormap)

现在我想绘制这些点[x, y] 这样:

  1. 每个点都应该是一个像素(因为len(x) 可能大约是35'000),而不仅仅是一个标记(恐怕它们会以其他方式重叠)。
  2. 使用this question,我想制作一个颜色图并将min(z) 映射为白色,将max(z) 映射为黑色(并显示图例)。

我如何使用 matplotlib 做到这一点?

【问题讨论】:

  • 到目前为止你尝试过什么代码?请在您的问题中包含这一点。
  • @HS-nebula 添加了我的代码。
  • x、y 和 z 的长度是否相同?二次空间中的所有像素是“被占用”还是只有一些?

标签: python matplotlib


【解决方案1】:

由于您谈论的是像素而不是标记,而且我不知道您是否获得了所有像素坐标的数据,还是仅获得了一些数据,我将向您展示两者的内容。我将包含numpy 包,因为它使数组的一切变得更容易。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm
from matplotlib.colors import Normalize

x = range(1, 100) # pixel x coordinates
y = range(21, 120) # pixel y coordinates

假设您拥有[x, y] 跨越的所有坐标的 z 数据:

In [1]: z = np.random.rand(len(x), len(y)) # should be mapped to colors
plt.imshow(z)
plt.colorbar()
Out [1]:

假设每个z 值都映射到一个[x, y] 坐标对,但并非所有坐标都被覆盖:

In [2]:
z = np.random.rand(len(x))

arr = np.zeros([max(x) + 1, max(y) + 1])
arr[x, y] = z

plt.imshow(arr)
plt.colorbar()

Out [2]:

【讨论】:

    猜你喜欢
    • 2017-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多