2017-08-09 58 views
0

在我所維護的分類廣告網站中,我比較了接受大於中位數的分類的分類與在此準則中低於中值的分類。我稱之爲「高性能」分類廣告。這裏是展示這種簡單的countplot:比例(帶色調)的劇情類型

enter image description here

hue簡直就是分類過的照片數量。

我的問題是 - 是否有在seaborn或matplotlib中顯示比例而不是絕對計數的陰謀類型?

我基本上想要相同的計數繪圖,但每個小節佔特定類別中總項目的百分比。例如,請注意,在計數圖中,使用3張照片進行分類的比例在high perf類別中佔很大比例。收集這些信息需要一段時間。如果每個酒吧的高度代表它對其類別的貢獻百分比,那麼這將是一個更容易的比較。這就是爲什麼我正在尋找我正在尋找的東西。

一個說明性的例子會很棒。

回答

2

而不是試圖找到一個特定的情況下繪圖功能,會做你想要的,我建議考慮保持數據的生成和可視化分開。最後,你想要繪製一些值的條形圖,所以這個想法應該是生成數據以便於繪製。

爲此,您可以crosstab問題的兩列,並將結果表中的每一行(或列)除以其總和。然後可以使用熊貓繪圖包裝器輕鬆繪製該表格。

import matplotlib.pyplot as plt 
import numpy as np; np.random.seed(42) 
import pandas as pd 
plt.rcParams["figure.figsize"] = 5.6, 7.0 

n = 100 
df = pd.DataFrame({"performance": np.random.choice([0,1], size=n, p=[0.7,0.3]), 
        "photo" : np.random.choice(range(4), size=n, p=[0.6,0.1,0.2,0.1]), 
        "someothervalue" : np.random.randn(n) }) 

fig, (ax,ax2, ax3) = plt.subplots(nrows=3) 

freq = pd.crosstab(df["performance"],df["photo"]) 
freq.plot(kind="bar", ax=ax) 

relative = freq.div(freq.sum(axis=1), axis=0) 
relative.plot(kind="bar", ax=ax2) 

relative = freq.div(freq.sum(axis=0), axis=1) 
relative.plot(kind="bar", ax=ax3) 


ax.set_title("countplot of absolute frequency") 
ax2.set_title("barplot of relative frequency by performance") 
ax3.set_title("barplot of relative frequency by photo") 
for a in [ax, ax2, ax3]: a.legend(title="Photo", loc=6, bbox_to_anchor=(1.02,0.5)) 
plt.subplots_adjust(right=0.8,hspace=0.6) 
plt.show() 

enter image description here