python自动生成宣传单_自定义matplotlib绘图:带彩色单元格的棋盘形表格

基本上,您可以只使用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()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值