我想将python / matplotlib / pandas用于我的目的。
问题描述:我有一张excel表(我可以读作庞巴数据帧),其中包含一个真实值和估计值的表。我想以某种方式在实际(水平轴)与估计值(垂直轴)的图上捕获此信息。 excel表看起来有点如下:
我正在考虑散点图。但我不知道如何获得这样的情节。在这种情况下,它不是简单的散点图。此外,轴需要以不同方式处理。如果有其他适当的方式,请随时提出建议。
修改1:
根据@BrenBarn的建议,我在Cross Validated发布了我的查询。我特别喜欢的一个答案显示了以下可视化: (see link)
我想使用python生成类似的散点图。任何人都可以帮助我吗?
答案 0 :(得分:0)
为了使该表成为类似于您链接的图表,我首先要创建一个数组,其中一个轴对应于"实际值"和另一个估计值" (因此包括上表中没有的所有零值):
import matplotlib.pyplot as plt
import numpy as np
label = ['A', 'F', 'J', 'P', 'T', 'Z']
nlabel = 6
values = np.zeros([nlabel, nlabel])
values[0, 0] = 10; values[0, 2] = 10; values[0, 3] = 10
values[1, 1] = 40; values[2, 1] = 10; values[3, 3] = 10
values[3, 4] = 10; values[4, 5] = 30; values[4, 3] = 20
values[5, 4] = 10
print " ", label
for i in np.arange(nlabel): print label[i], values[i]
打印以确保它看起来像上面的表格:
['A', 'F', 'J', 'P', 'T', 'Z']
A [ 10. 0. 10. 10. 0. 0.]
F [ 0. 40. 0. 0. 0. 0.]
J [ 0. 10. 0. 0. 0. 0.]
P [ 0. 0. 0. 10. 10. 0.]
T [ 0. 0. 0. 20. 0. 30.]
Z [ 0. 0. 0. 0. 10. 0.]
然后我会使用这些值来缩放matplotlib.pyplot.scatter中标记的大小,如下所示。
fig, ax = plt.subplots()
for i in np.arange(nlabel):
plt.scatter(np.arange(nlabel), i * np.ones_like(values[i]),
s=values[i] * 42, marker='s')
plt.axes([0, nlabel+1, 0, nlabel+1])
ticklabel = [item.get_text() for item in ax.get_xticklabels()]
ticklabel[1:1+nlabel] = label
ax.set_xticklabels(ticklabel)
ax.set_yticklabels(ticklabel)
ax.set_xlabel('Estimated')
ax.set_ylabel('Actual')
plt.show()
这应该会给你一个与你所链接的情节非常类似的情节。我没有做趋势线或方块内的数字,但Google / StackOverflow应该能够为您提供解决方案。