2016-07-02 29 views
1

我想使用Python/matplotlib /熊猫我的目的。如何绘制一个事件相对于其他事件的频率?

问题描述:我有一个包含真值和估计值的表excel工作表(我可以读取为数据帧大熊猫)。我想以某种方式在实际(横轴)与估计值(纵轴)的图上捕获这些信息。 Excel工作表看起来有点如下:

enter image description here

我想到一个散点图。但我不知道如何获得这样的情节。在这种情况下,它不是一个简单的散点图。另外,这些轴需要以不同的方式处理。如果有其他适当的方式,请随时提出建议。

编辑1:

至于建议的@BrenBarn,我贴我的查询中Cross Validated。我特别喜欢的一个答案显示了以下可视化: (see link)

我想用python生成一个类似的散点图。谁能帮我吗?

+0

如果你问如何*决定可视化应该是*什么样的,是不是真的就主题为这个网站。一旦你决定了你想要的样子,这个网站将会问如何实现一个特定的可视化。您可以尝试[交叉验证](http://stats.stackexchange.com/)。这就是说,一种可能性是绘制“混淆矩阵”,用行和列的类别的网格和按照一定的真正范畴了多少次分类为某些类别估计阴影每个单元的视觉表示。 – BrenBarn

+0

@BrenBarn:非常感谢您提供'交叉验证'。 – Tarun

回答

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应该能够为您提供解决方案。