在學習本篇博文之前請先看一看之前發過的關聯知識:
Python數據可視化:如何選擇合適的圖表可視化?
根據表達數據的側重內容點,將圖表類型分為6大類:類別比較圖表、數據關系圖表、數據分布圖表、時間序列圖表、局部整體圖表和地理空間圖表(有些圖表也可以歸類于兩種或多種圖表類型)。
本篇將介紹類別比較圖表的可視化方法。
類別比較型圖表的數據一般分為:數值型和類別型兩種數據類型,主要包括:柱形圖、條形圖、雷達圖、詞云圖等,通常用來比較數據的規模。如下所示:
1
柱狀圖
柱形圖是一種以長方形的長度為變量的統計圖表。柱形圖用于顯示一段時間內的數據變化或顯示各項之間的比較情況。
在柱形圖中,類別型或序數型變量映射到橫軸的位置,數值型變量映射到矩形的高度。控制柱形圖的兩個重要參數是:“系列重疊"和“分類間距”。
-
“分類間距"控制同一數據系列的柱形寬度;
-
“系列重疊"控制不同數據系列之間的距離。
下圖為常見的柱形圖類型:單數據系列柱形圖、多數據系列柱形圖、堆積柱形圖和百分比堆積柱形圖。
1.1、單數據系列柱形圖
通過一個示例了解單數據系列柱形圖的使用,實現代碼如下所示:
mydata = pd.DataFrame({'Cut': ["Fair", "Good", "Very Good", "Premium", "Ideal"],
'Price': [4300, 3800, 3950, 4700, 3500]})
Sort_data = mydata.sort_values(by='Price', ascending=False)
fig = plt.figure(figsize=(6, 7), dpi=70)
plt.subplots_adjust(left=0.1, right=0.9, top=0.9, bottom=0.1)
plt.grid(axis="y", c=(217/256, 217/256, 217/256))
ax = plt.gca()
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
ax.spines['left'].set_color('none')
plt.bar(Sort_data['Cut'], Sort_data['Price'],
width=0.6, align="center", label="Cut")
plt.ylim(0, 6000)
plt.xlabel('Cut')
plt.ylabel('Price')
plt.show()
效果如下所示:
1.2、多數據系列柱形圖
通過一個示例了解多數據系列柱形圖的使用,實現代碼如下所示:
x_label = np.array(df["Catergory"])
x = np.arange(len(x_label))
y1 = np.array(df["1996"])
y2 = np.array(df["1997"])
fig = plt.figure(figsize=(5, 5))
plt.subplots_adjust(left=0.1, right=0.9, top=0.9, bottom=0.1) # 設置繪圖區域大小位置
plt.bar(x, y1, width=0.3, color='#00AFBB', label='1996', edgecolor='k',
linewidth=0.25) # 調整y1軸位置,顏色,label為圖例名稱,與下方legend結合使用
plt.bar(x+0.3, y2, width=0.3, color='#FC4E07', label='1997',
edgecolor='k', linewidth=0.25) # 調整y2軸位置,顏色,label為圖例名稱,與下方legend結合使用
plt.xticks(x+0.15, x_label, size=12) # 設置x軸刻度,位置,大小
# 顯示圖例,loc圖例顯示位置(可以用坐標方法顯示),ncol圖例顯示幾列,默認為1列,frameon設置圖形邊框
plt.legend(loc=(1, 0.5), ncol=1, frameon=False)
plt.yticks(size=12) # 設置y軸刻度,位置,大小
plt.grid(axis="y", c=(217/256, 217/256, 217/256)) # 設置網格線
# 將y軸網格線置于底層
# plt.xlabel("Quarter",labelpad=10,size=18,) #設置x軸標簽,labelpad設置標簽距離x軸的位置
# plt.ylabel("Amount",labelpad=10,size=18,) #設置y軸標簽,labelpad設置標簽距離y軸的位置
ax = plt.gca()
ax.spines['top'].set_color('none') # 設置上‘脊梁’為無色
ax.spines['right'].set_color('none') # 設置右‘脊梁’為無色
ax.spines['left'].set_color('none') # 設置左‘脊梁’為無色
plt.show()
效果如下所示:
1.3、堆積柱形圖
通過一個示例了解堆積柱形圖的使用,實現代碼如下所示:
# -*- coding: utf-8 -*-
# %%
import pandas as pd
import numpy as np
from plotnine import *
mydata = pd.DataFrame(dict(Name=['A', 'B', 'C', 'D', 'E'],
Scale=[35, 30, 20, 10, 5],
ARPU=[56, 37, 63, 57, 59]))
# 構造矩形X軸的起點(最小點)
mydata['xmin'] = 0
for i in range(1, 5):
mydata['xmin'][i] = np.sum(mydata['Scale'][0:i])
# 構造矩形X軸的終點(最大點)
mydata['xmax'] = 0
for i in range(0, 5):
mydata['xmax'][i] = np.sum(mydata['Scale'][0:i+1])
mydata['label'] = 0
for i in range(0, 5):
mydata['label'][i] = np.sum(mydata['Scale'][0:i+1])-mydata['Scale'][i]/2
base_plot = (ggplot(mydata) +
geom_rect(aes(xmin='xmin', xmax='xmax', ymin=0, ymax='ARPU', fill='Name'), colour="black", size=0.25) +
geom_text(aes(x='label', y='ARPU+3', label='ARPU'), size=14, color="black") +
geom_text(aes(x='label', y=-4, label='Name'), size=14, color="black") +
scale_fill_hue(s=0.90, l=0.65, h=0.0417, color_space='husl') +
ylab("ARPU") +
xlab("scale") +
ylim(-5, 80) +
theme( # panel_background=element_rect(fill="white"),
#panel_grid_major = element_line(colour = "grey",size=.25,linetype ="dotted" ),
#panel_grid_minor = element_line(colour = "grey",size=.25,linetype ="dotted" ),
text=element_text(size=15),
legend_position="none",
aspect_ratio=1.15,
figure_size=(5, 5),
dpi=100
))
print(base_plot)
2
條形圖
條形圖與柱形圖類似,幾乎可以表達相同多的數據信息。
在條形圖中,類別型或序數型變量映射到縱軸的位置,數值型變量映射到矩形的寬度。條形圖的柱形變為橫向,從而導致與柱形圖相比,條形圖更加強調項目之間的大小對比。尤其在項目名稱較長以及數量較多時,采用條形圖可視化數據會更加美觀、清晰,如下圖所示:
2.1、單數據系列條形圖
通過一個示例了解單數據系列條形圖的使用,實現代碼如下所示:
df = pd.read_csv('Stackedbar_Data.csv')
df = df.sort_values(by='Pensions', ascending=True)
df['Country'] = pd.Categorical(df['Country'], categories=df['Country'], ordered=True)
df
# %%
base_plot = (ggplot(df, aes('Country', 'Pensions')) +
# "#00AFBB"
geom_bar(stat="identity", color="black", width=0.6, fill="#FC4E07", size=0.25) +
實現效果如下所示:
2.2、多數據系列條形圖
通過一個示例了解多數據系列條形圖的使用,實現代碼如下所示:
df = pd.read_csv('Stackedbar_Data.csv')
效果如下所示:
2.3、堆積條形圖
通過一個示例了解堆積條形圖的使用,實現代碼如下所示:
df = pd.read_csv('Stackedbar_Data.csv')
Sum_df = df.iloc[nonedisplay: none;'>
2.4、百分比堆積條形圖
通過一個示例了解百分比堆積條形圖的使用,實現代碼如下所示:
df = pd.read_csv('Stackedbar_Data.csv')
效果如下所示:
4
詞云圖
詞云圖通過使每個字的大小與其出現頻率成正比,顯示不同單詞在給定文本中的出現頻率,這會過濾掉大量的文本信息,使瀏覽者只要一眼掃過文本就可以領略文本的主旨。
詞云圖會將所有的字詞排在一起,形成云狀圖案,也可以任何格式排列:水平線、垂直列或其他形狀,也可用于顯示獲分配元數據的單詞。如下圖所示:
每個圓圈表示一個數值刻度,而徑向分隔線(從中心延伸出來的線)則用于區分不同類別或間隔(如果是直方圖)。刻度上較低的數值通常由中心點開始,然后數值會隨著每個圓形往外增加,但也可以把任何外圓設為零值,這樣里面的內圓就可用來顯示負值。條形通常從中心點開始向外延伸,但也可以以別處為起點,顯示數值范圍(如跨度圖)。
此外,條形也可以如堆疊式條形圖般堆疊起來,如下圖所示:
8
熱力圖
熱力圖是一種通過對色塊著色來顯示數據的統計圖表,繪圖時需指定顏色映射的規則。例如,較大的值由較深的顏色表示,較小的值由較淺的顏色表示;較大的值由偏暖的顏色表示,較小的值由較冷的顏色表示等。
通過一個示例了解熱力圖的使用,實現代碼如下所示:
import numpy as np
import pandas as pd
from plotnine import *
from plotnine.data import mtcars
mat_corr = np.round(mtcars.corr(), 1).reset_index()
mydata = pd.melt(mat_corr, id_vars='index', var_name='var', value_name='value')
mydata
# %%
base_plot = (ggplot(mydata, aes(x='index', y='var', fill='value', label='value')) +
geom_tile(colour="black") +
geom_text(size=8, colour="white") +
scale_fill_cmap(name='RdYlBu_r') +
coord_equal() +
theme(dpi=100, figure_size=(4, 4)))
print(base_plot)
# %%
mydata['AbsValue'] = np.abs(mydata.value)
base_plot = (ggplot(mydata, aes(x='index', y='var', fill='value', size='AbsValue')) +
geom_point(shape='o', colour="black") +
# geom_text(size=8,colour="white")+
scale_size_area(max_size=11, guide=False) +
scale_fill_cmap(name='RdYlBu_r') +
coord_equal() +
theme(dpi=100, figure_size=(4, 4)))
print(base_plot)
# %%
base_plot = (ggplot(mydata, aes(x='index', y='var', fill='value', size='AbsValue')) +
geom_point(shape='s', colour="black") +
# geom_text(size=8,colour="white")+
scale_size_area(max_size=10, guide=False) +
scale_fill_cmap(name='RdYlBu_r') +
coord_equal() +
theme(dpi=100, figure_size=(4, 4)))
print(base_plot)
效果如下所示:
-
可視化
+關注
關注
1文章
1197瀏覽量
20966 -
圖表
+關注
關注
0文章
28瀏覽量
8871 -
python
+關注
關注
56文章
4798瀏覽量
84801
原文標題:Python數據可視化:類別比較圖表可視化
文章出處:【微信號:美男子玩編程,微信公眾號:美男子玩編程】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論