python - 以分类值作为标签的热图
问题描述
鉴于我的数据的以下子集
import matplotlib.pyplot as plt
import numpy as np
data = np.array([['Yes', 'No', 'No', 'Maybe', 'Yes', 'Yes', 'Yes'],
[0.21, 0.62, 0.56, 0.48, 0.32, 0.71, 0.01],
[1.1053, 1.5412, 1.4333, 1.1433, 1.1098, 1.1003, 1.2032]])
我想绘制第二行和第三行的热图,并将第一行用作每个框中的标签。我尝试过使用,plt.imshow()
但是一旦我使用完整的数据集,它就会出现问题,而且我找不到将分类值作为标签合并到每个框中的方法。
另一方面,如果我这样做:
data1 = np.array([[0.21, 0.62, 0.56, 0.48, 0.32, 0.71, 0.01],
[1.1053, 1.5412, 1.4333, 1.1433, 1.1098, 1.1003, 1.2032]])
plt.imshow(data1, cmap='hot', interpolation='nearest')
我得到了一张热图,但它并不能很好地描述我想要的,因为缺少标签和轴。有什么建议么?
列名是'Decision', 'Percentage', 'Salary multiplier'
解决方案
首先, np.array 需要所有元素的类型相同。由于您的数组还包含字符串,因此这将成为通用类型。因此,最好不要将数组作为 np.array,或者对字符串使用单独的数组。
由于您的数据似乎是 x,y 位置,因此将它们用作散点图中的坐标是有意义的。您可以根据 Yes/Maybe/No 值为 x、y 位置着色,例如为它们分配绿色/黄色/红色。此外,您可以添加文本,因为您的数据很少。有了更多数据,您最好创建一个图例来将标签与其颜色联系起来。
from matplotlib import pyplot as plt
import numpy as np
data = [['Yes', 'No', 'No', 'Maybe', 'Yes', 'Yes', 'Yes'],
[0.21, 0.62, 0.56, 0.48, 0.32, 0.71, 0.01],
[1.1053, 1.5412, 1.4333, 1.1433, 1.1098, 1.1003, 1.2032]]
answer_to_color = {'Yes': 'limegreen', 'Maybe': 'gold', 'No': 'crimson'}
colors = [answer_to_color[ans] for ans in data[0]]
plt.scatter(data[1], data[2], c=colors, s=500, ls='-', edgecolors='black')
for label, x, y in zip(data[0], data[1], data[2]):
plt.text(x+0.01, y+0.03, label)
plt.show()
要使用您的列名来标记图表,您可以添加:
plt.title('Decision')
plt.xlabel('Percentage')
plt.ylabel('Salary multiplier')
推荐阅读
- haskell - 如何创建 Haskell 刺猬类型`Gen a` 的值?
- php - PayPal 智能支付按钮错误 paypal.Buttons 不是函数
- javascript - 为什么我得到此代码中未定义逻辑
- react-native - 如何在 Modal 组件中滚动 FlatList?
- vue.js - Vue-router:在路由器中使用组件方法
- javascript - 鼠标移动时的空闲事件 - 如何在鼠标移动时永久停止脚本
- css - 我怎样才能使网格中的列响应
- python - 我怎样才能在最后开始的理解列表中写?
- c# - 将枚举类型传递给具有整数值的转换器
- reactjs - framework7-cli 生成的应用程序开发服务器不更新