【发布时间】:2023-04-10 22:41:01
【问题描述】:
我对 Matplotlib 的表格方面相当陌生,并且一直难以理解颜色图的功能。所以我在这里遗漏了一些简单的东西,我很抱歉......这不是故意的。
我希望创建一个表格来显示随机模型的乘法偏差值。这是一个关键方面,因为值的分布不是线性的——也不一定是指数的。例如,数据分布应该以 1 为中心,不低于零,理论上没有上限(尽管我将其限制在 10)。
因此,就颜色图而言,我需要颜色图以值“1”为中心,颜色图的一半着色值从 0 到 1,另一半着色值从 1 到 10。理想情况下,这将是“发散”颜色图,例如“bwr”(此处的示例:https://matplotlib.org/stable/tutorials/colors/colormaps.html),其中接近 1 的值是白色,(0 和 1)之间的值是各种蓝色,而(1 和 10)之间的值是各种深浅不一的红色。
我似乎无法解开如何将整个混乱的指令传递到 Matplotlib 中的“cellColours”参数中。我找到了有关如何使用颜色图来控制单元格颜色的有用示例(例如here),我正在尝试构建这些示例(见下文)。这确实将“bwr”颜色图粘附到表格上 - 但是,它在数据集上线性应用它,我似乎无法将我的大脑包裹起来以使颜色图遵守可能自定义的比例(0
有什么提示或建议吗?我是不是很傻,错过了一些清晰易懂的东西?
import numpy as np
import matplotlib
from matplotlib import cm
import matplotlib.pyplot as plt
from pandas import *
#Create sample dataset
idx = Index(np.arange(1,6))
df = DataFrame(abs(2*np.random.randn(5, 5)), index=idx, columns=['A', 'B', 'C', 'D', 'E'])
#print(df)
vals = np.around(df.values,2)
print(vals)
##Create list of customized levels--linear from 0 to 1, then linear from 1 to 10--with
##granularity to match 256 entry colormap.
##Do I do something with this?
firstlist = np.linspace(0, 1, num=128)
secondlist = np.linspace(1.05,10,num=127)
levels = np.concatenate((firstlist, secondlist), axis=0)
norm = plt.Normalize(0,10)
colours = plt.cm.bwr(norm(vals)) #Linear normalization of the colormap, which isn't what is desired.
fig = plt.figure(figsize=(15,8))
ax = fig.add_subplot(111, frameon=False, xticks=[], yticks=[])
the_table=plt.table(cellText=vals, rowLabels=df.index, colLabels=df.columns,
loc='center', cellColours=colours)
plt.savefig('test_table.png')
【问题讨论】:
-
您想要具有不同边界的自定义 cmap。尝试,例如this link.
标签: python pandas numpy matplotlib