基本上,您可以只使用imshow或matshow。
不过,我不太明白你的意思。
如果你想要一个棋盘,棋盘上的每一个“白色”单元格都用其他向量着色,你可以这样做:import matplotlib.pyplot as plt
import numpy as np
# Make a 9x9 grid...
nrows, ncols = 9,9
image = np.zeros(nrows*ncols)
# Set every other cell to a random number (this would be your data)
image[::2] = np.random.random(nrows*ncols //2 + 1)
# Reshape things into a 9x9 grid.
image = image.reshape((nrows, ncols))
row_labels = range(nrows)
col_labels = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I']
plt.matshow(image)
plt.xticks(range(ncols), col_labels)
plt.yticks(range(nrows), row_labels)
plt.show()
显然,这只适用于行数和列数为奇数的情况。对于行数和列数为偶数的数据集,可以在每行上迭代。
例如:for i, (image_row, data_row) in enumerate(zip(image, data)):
image_row[i%2::2] = data_row
但是,每一行中的“数据”单元格的数量将有所不同,这就是我对您的问题定义感到困惑的地方。
根据定义,棋盘格模式在每行中有不同数量的“白色”单元格。
你的数据大概是在每行中具有相同数量的值。你需要定义你想做什么。可以截断数据,也可以添加额外的列。
编辑:我刚刚意识到这只适用于奇数列。
不管怎样,我还是被你的问题搞糊涂了。
您是希望有一个“完整”的数据网格,并希望将数据网格中的值的“棋盘”图案设置为不同的颜色,还是希望将数据“散布”为绘制为某种恒定颜色的值的“棋盘”图案?
更新
听起来你想要一个更像是宣传单的东西?Matplotlib并不适合这样做,但您可以这样做。
理想情况下,您只需使用plt.table,但在这种情况下,直接使用matplotlib.table.Table更容易:import matplotlib.pyplot as plt
import numpy as np
import pandas
from matplotlib.table import Table
def main():
data = pandas.DataFrame(np.random.random((12,8)),
columns=['A','B','C','D','E','F','G','H'])
checkerboard_table(data)
plt.show()
def checkerboard_table(data, fmt='{:.2f}', bkg_colors=['yellow', 'white']):
fig, ax = plt.subplots()
ax.set_axis_off()
tb = Table(ax, bbox=[0,0,1,1])
nrows, ncols = data.shape
width, height = 1.0 / ncols, 1.0 / nrows
# Add cells
for (i,j), val in np.ndenumerate(data):
# Index either the first or second item of bkg_colors based on
# a checker board pattern
idx = [j % 2, (j + 1) % 2][i % 2]
color = bkg_colors[idx]
tb.add_cell(i, j, width, height, text=fmt.format(val),
loc='center', facecolor=color)
# Row Labels...
for i, label in enumerate(data.index):
tb.add_cell(i, -1, width, height, text=label, loc='right',
edgecolor='none', facecolor='none')
# Column Labels...
for j, label in enumerate(data.columns):
tb.add_cell(-1, j, width, height/2, text=label, loc='center',
edgecolor='none', facecolor='none')
ax.add_table(tb)
return fig
if __name__ == '__main__':
main()