绘制一个二维数组,轴上标有一维数组的数组值

Plot a 2D array with axes labelled with the array values of a 1D array

我有一个一维数组 arr1d = ['A', 'B', 'C', 'D'] 我有一个二维数组

arr2d =[[1, 2, 5, 3], [2, 1, 2, 5], [5, 3, 4, 4], [5, 5, 3, 4]] (说) 我希望使用 matplotlib(或任何其他库)以如下方式输出数组。 我希望 x 轴和 y 轴按照一维数组进行标记,如图所示。 如何实现?

您可以在 matplotlib 中使用 matshow 获得接近您需要的结果。

import matplotlib.pyplot as plt
arr1d = ['A', 'B', 'C', 'D']
arr2d =[[1, 2, 5, 3], [2, 1, 2, 5], [5, 3, 4, 4], [5, 5, 3, 4]]
plt.matshow(arr2d)
plt.xticks([0,1,2,3], arr1d)
plt.yticks([0,1,2,3], arr1d)
plt.show()

您可以尝试这样的操作:

from matplotlib import pyplot as plt
from matplotlib import colors
import numpy as np

arr1d = ['A', 'B', 'C', 'D']
data = np.array([[1, 2, 5, 3], [2, 1, 2, 5], [5, 3, 4, 4], [5, 5, 3, 4]])
cmap = colors.ListedColormap(['blue','red', 'green', 'yellow', 'cyan'])
fig, ax = plt.subplots()
ax.imshow(data, cmap=cmap)

for (i, j), z in np.ndenumerate(data):
    ax.text(j, i, '{}'.format(z), ha='center', va='center', size=12)
    
plt.xticks(np.arange(len(arr1d)), arr1d)
plt.yticks(np.arange(len(arr1d)), arr1d)
plt.show()

使用ListedColormap,您可以决定将哪个数字映射到哪种颜色。

或者用网格线:

from matplotlib import pyplot as plt
from matplotlib import colors
import numpy as np
from matplotlib.ticker import (AutoMinorLocator, MultipleLocator)

arr1d = ['A', 'B', 'C', 'D']
data = np.array([[1, 2, 5, 3], [2, 1, 2, 5], [5, 3, 4, 4], [5, 5, 3, 4]])
cmap = colors.ListedColormap(['blue','red', 'green', 'yellow', 'cyan'])

_, ax = plt.subplots()
for (i, j), z in np.ndenumerate(data):
  ax.annotate('{}'.format(z), xy = (j + 0.4, i + 0.6), fontsize=15)

ax.imshow(data, cmap=cmap, extent=(0, data.shape[0], data.shape[1], 0))
ax.grid(color='black', linewidth=3)

plt.xticks(np.arange(len(arr1d)), arr1d)
plt.yticks(np.arange(len(arr1d)), arr1d)
plt.show()