绘制一个二维数组,轴上标有一维数组的数组值
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()
我有一个一维数组 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()