如何在matplotlib中用标准化颜色绘制点?

时间:2019-05-09 13:38:14

标签: python matplotlib

我有以下代码:

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做到这一点?

1 个答案:

答案 0 :(得分:0)

由于您是在谈论像素而不是标记,并且我不知道您是获取所有像素坐标的数据还是仅获取一些像素坐标的数据,因此我将向您展示这两者的数据。我将包含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]:

enter image description here

假设每个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]:

enter image description here