给定我的数据的以下子集
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位置,因此将它们用作散点图中的坐标是有意义的。您可以根据是/可能/否值为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')