26.27.28.29.极区图(南丁格尔玫瑰图)、维恩图 (Venn diagram)、面状图(Area chart)、树地图
26.極區圖(南丁格爾玫瑰圖)
27.維恩圖 (Venn diagram)
28.面狀圖(Area chart)
29.樹地圖
26.極區圖(南丁格爾玫瑰圖)
極區圖(又名南丁格爾玫瑰圖)呈放射延伸狀,每塊會占一定的角度。其半徑大小表示它代表的某一類數據的大小。其角度大小表示它所占總類別的比例。
南丁格爾玫瑰圖,是由南丁格爾發明的,她是英國護士和統計學家。其在英國軍營工作時收集了在克里米亞戰爭時期的士兵在不同月份的死亡率和原因分布,通過玫瑰圖的方式有效的打動了當時的高層管理人員,于是醫療改良的提案才受到了大力的支持,將士兵的死亡率從42%降低至2%,因此后來將此圖形稱為南丁格爾玫瑰圖。
那南丁格爾玫瑰圖一般用在什么場景呢?其實南丁格爾玫瑰圖和餅圖類似,算是餅圖的一種變形,用法也一樣,主要用在需要查看占比的場景中。兩者唯一的區別是:餅圖是通過角度判別占比大小,而玫瑰圖可以通過半徑大小或者扇形面積大小來判別。
import numpy as np import matplotlib.pyplot as plt# Fixing random state for reproducibility np.random.seed(19680801)# Compute pie slices N = 10 theta = np.linspace(0.0, 2 * np.pi, N, endpoint=False) radii = 10 * np.random.rand(N) width = np.pi / 4 * np.random.rand(N) colors = plt.cm.viridis(radii / 10.)ax = plt.subplot(111, projection='polar') ax.bar(theta, radii, width=width, bottom=0.0, color=colors, alpha=0.5)plt.show() import matplotlib.pyplot as plt import numpy as npN = 7 '''生成角度值''' theta = np.arange(0.,2*np.pi,2*np.pi/N) '''生成半徑值''' radii = np.array([7,4,5,3,2,4,6]) '''定義軸類型''' plt.axes([0.025,0.025,0.95,0.95],polar=True) '''定義顏色集,這里使用RGB值,當然也可以使用顏色名稱''' colors = np.array(['#4bb2c5','#c5b47f','#EAA228','#579575','#839557','#958c12','#953579']) '''bar()函數要求傳入角度和半徑作為參數''' bars = plt.bar(theta,radii,width=(2*np.pi/N),bottom=0.0,color=colors) plt.show()27.維恩圖 (Venn diagram)
維恩圖是顯示集合之間邏輯關系(交集,差集,并集)的圖。
使用時要安裝matplotlib-venn:pip install matplotlib-venn
import matplotlib.pyplot as plt from matplotlib_venn import venn2# First way to call the 2 group Venn diagram venn2(subsets=(10, 5, 2), set_labels=('Group A', 'Group B')) plt.show() import matplotlib.pyplot as plt from matplotlib_venn import venn2# Second way venn2([set(['A', 'B', 'C', 'D']), set(['D', 'E', 'F'])]) plt.show() import pandas as pd import numpy as np import matplotlib.pyplot as plt from matplotlib_venn import venn2df = pd.DataFrame({'Product': ['Only cheese', 'Only red wine', 'Both'],'NbClient': [900, 1200, 400]},columns = ['Product', 'NbClient']) print(df) ''' 輸出結果:Product NbClient 0 Only cheese 900 1 Only red wine 1200 2 Both 400 '''# First way plt.figure(figsize=(8, 11))v2 = venn2(subsets = {'10': df.loc[0, 'NbClient'],'01': df.loc[1, 'NbClient'],'11': df.loc[2, 'NbClient']},set_labels=('', '')) v2.get_patch_by_id('10').set_color('yellow') v2.get_patch_by_id('01').set_color('red') v2.get_patch_by_id('11').set_color('orange')v2.get_patch_by_id('10').set_edgecolor('none') v2.get_patch_by_id('01').set_edgecolor('none') v2.get_patch_by_id('11').set_edgecolor('none')v2.get_label_by_id('10').set_text('%s\n%d\n(%.0f%%)' % (df.loc[0, 'Product'],df.loc[0, 'NbClient'],np.divide(df.loc[0, 'NbClient'],df.NbClient.sum())*100))v2.get_label_by_id('01').set_text('%s\n%d\n(%.0f%%)' % (df.loc[1, 'Product'],df.loc[1, 'NbClient'],np.divide(df.loc[1, 'NbClient'],df.NbClient.sum())*100))v2.get_label_by_id('11').set_text('%s\n%d\n(%.0f%%)' % (df.loc[2, 'Product'],df.loc[2, 'NbClient'],np.divide(df.loc[2, 'NbClient'],df.NbClient.sum())*100)) for text in v2.subset_labels:text.set_fontsize(12)plt.show() import pandas as pd import numpy as np import matplotlib.pyplot as plt from matplotlib_venn import venn2# Second way grp1 = set(['cheese-a', 'cheese-b', 'cheese-c', 'cheese-d','cheese-e', 'cheese-f', 'cheese-g', 'cheese-h','cheese-i', 'cheese', 'red wine']) grp2 = set(['red wine-a', 'red wine-b', 'red wine-c', 'red wine-d','red wine-e', 'red wine-f', 'red wine-g', 'red wine-h','red wine-i', 'red wine-j', 'red wine-k', 'red wine-l','red wine', 'cheese'])v2 = venn2([grp1, grp2], set_labels = ('', ''))v2.get_patch_by_id('10').set_color('yellow') v2.get_patch_by_id('01').set_color('red') v2.get_patch_by_id('11').set_color('orange')v2.get_patch_by_id('10').set_edgecolor('none') v2.get_patch_by_id('01').set_edgecolor('none') v2.get_patch_by_id('11').set_edgecolor('none')v2.get_label_by_id('10').set_text('Only cheese\n(36%)') v2.get_label_by_id('01').set_text('Only red wine\n(48%)') v2.get_label_by_id('11').set_text('Both\n(16%)')plt.show()這種維恩圖通常可用于零售交易的分析。 假設需要研究奶酪和紅酒的受歡迎程度,并且有2500位客戶回答了問卷。 根據上圖,我們發現在2500位客戶中,有900位客戶(36%)喜歡奶酪,有1200位客戶(48%)喜歡紅酒,而400位客戶(16%)喜歡這兩種產品。
import matplotlib.pyplot as plt from matplotlib_venn import venn3plt.figure(figsize=(12,12))v3 = venn3(subsets = {'100':30, '010':30, '110':17,'001':30, '101':17, '011':17, '111':5},set_labels = ('', '', ''))v3.get_patch_by_id('100').set_color('red') v3.get_patch_by_id('010').set_color('yellow') v3.get_patch_by_id('001').set_color('blue') v3.get_patch_by_id('110').set_color('orange') v3.get_patch_by_id('101').set_color('purple') v3.get_patch_by_id('011').set_color('green') v3.get_patch_by_id('111').set_color('grey')v3.get_label_by_id('100').set_text('Math') v3.get_label_by_id('010').set_text('Computer science') v3.get_label_by_id('001').set_text('Domain expertise') v3.get_label_by_id('110').set_text('Machine learning') v3.get_label_by_id('101').set_text('Statistical research') v3.get_label_by_id('011').set_text('Data processing') v3.get_label_by_id('111').set_text('Data science')for text in v3.subset_labels:text.set_fontsize(13)plt.show()28.面狀圖(Area chart)
面狀圖或面積圖以圖形方式顯示定量數據。 它基于折線圖。 通常用顏色、紋理和陰影線強調軸和線之間的區域。
可用于顯示或比較隨時間變化的定量進度。
假設上面的圖描述了一年內冰淇淋銷售的營業額。 根據該圖,可以清楚地發現,銷售在夏天達到頂峰,然后從秋天到冬天下降。
例子2:
import numpy as np import matplotlib.pyplot as pltplt.figure(figsize=(9, 6))year_n_1 = [1.5, 3, 10, 13, 22, 36, 30, 33, 24.5, 15, 6.5, 1.2] year_n = [2, 7, 14, 17, 20, 27, 30, 38, 25, 18, 6, 1]plt.fill_between(np.arange(12), year_n_1, color="lightpink", alpha=0.5, label='year N-1') plt.fill_between(np.arange(12), year_n, color="skyblue", alpha=0.5, label='year N')plt.tick_params(labelsize=12) plt.xticks(np.arange(12), np.arange(1,13)) plt.xlabel('Month', size=12) plt.ylabel('Turnover (K dollars) of ice-cream', size=12) plt.ylim(bottom=0) plt.legend()plt.show()29.樹地圖
樹地圖將層次結構(樹狀結構)數據顯示為一組嵌套矩形。 樹的每個分支都有一個矩形,然后用代表子分支的較小矩形平鋪。 葉節點的矩形的面積與數據的指定尺寸成比例。 通常,葉節點被著色以顯示數據的單獨維度。
樹地圖的思想就是通過方塊的面積來表示,面積越大,其代表的值就越大,反之亦然。
使用時安裝squarify:pip install squarify
函數語法及參數:
squarify.plot(sizes, norm_x=100, norm_y=100, color=None, label=None, value=None, alpha,**kwargs)?sizes:指定離散變量各水平對應的數值,即反映樹地圖子塊的面積大小;
?norm_x:默認將x軸的范圍限定在0-100之內;
?norm_y:默認將y軸的范圍限定在0-100之內;
?color:自定義設置樹地圖子塊的填充色;
?label:為每個子塊指定標簽;
?value:為每個子塊添加數值大小的標簽;
?alpha:設置填充色的透明度;
?**kwargs:關鍵字參數,與條形圖的關鍵字參數類似,如設置邊框色、邊框粗細等。
總結
以上是生活随笔為你收集整理的26.27.28.29.极区图(南丁格尔玫瑰图)、维恩图 (Venn diagram)、面状图(Area chart)、树地图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 21.等值线图(Counter Plot
- 下一篇: 新能源汽车续航600公里,充电到了100