2016-07-02 30 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應該能夠爲您提供解決方案。