參考資料:活用pandas庫
? ? ? ? matplotlib庫是python的和興繪圖工具,而seaborn基于matplotlib創建,它為繪制統計圖提供了更高級的接口,使得只用少量代碼就能生成更美觀、更復雜的可視化效果。
? ? ? ? seaborn庫和pandas以及其他pydata庫(numpy、scipy以及statsmodels)緊密集成在一起,簡化了數據分析過程的各種可視化工作。由于seaborn是基于matplotlib的,因此用戶仍能對可視化進行微調。
# 導入庫
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
tips=pd.read_csv(r"...\seaborn常用數據案例\tips.csv")
print(tips.head())
1、直方圖
# 使用subplots函數創建畫布,并在其中添加各個子圖
fig,ax=plt.subplots() # 默認創建1個子圖
# 使用seaborn的distplot函數繪圖
ax=sns.histplot(tips['total_bill'])
ax.set_title("Total Bill Histogram Plot")
plt.show()
2、密度圖(和密度估計):密度圖是展現單變量分布的另一種方法,本質上通過繪制以每個數據點為中心的正態分布,然后消除重疊的圖。
fig,ax=plt.subplots() # 默認創建1個子圖
ax=sns.histplot(tips['total_bill'],kde=True)
ax.set_title("Total Bill Histogram with Density Plot")
? ? ? ? 如果只要密度圖,還可以使用sns.kdeplot()函數
fig,ax=plt.subplots() # 默認創建1個子圖
ax=sns.kdeplot(tips['total_bill'])
ax.set_title("Total Bill Density")
3、計數圖(條形圖):條形圖不是通過對值分組來描述分布的,而是對離散變量計數的。
fig,ax=plt.subplots()
ax=sns.countplot(x='day',data=tips)
ax.set_title("Count of days")
ax.set_xlabel("Day of the Week")
ax.set_ylabel("Frequency")
4、散點圖
? ? ? ? 在seaborn中,沒有直接創建散點圖的函數。可以使用regplot函數或lmplot函數,二者主要區別是regplot創建軸域,而lmplot創建圖。
? ? ? ? 還可以使用jointplot在每個軸上創建包含單個變量的散點圖。jointplot與其他繪圖函數的主要區別是,它不返回軸域,所以無需創建帶有軸域的畫布來放置圖。jointplot函數會創建并返回JointGrid對象。
fig,ax=plt.subplots()
ax=sns.regplot(x='total_bill',y='tip',data=tips,fit_reg=False)
ax.set_title("Scatterplot of Total Bill and Tip")
ax.set_xlabel("Total Bill")
ax.set_ylabel("Tip")
fig=sns.lmplot(x='total_bill',y='tip',data=tips)
joint=sns.jointplot(x='total_bill',y='tip',data=tips)
# 設置坐標軸標簽
joint.set_axis_labels(xlabel='Total Bill',ylabel='Tip')
# 添加標題,設置字號
# 移動軸域上方的文字
joint.fig.suptitle("Joint Plot of Total Bill and Tip",fontsize=10,y=1.03)
5、蜂巢圖
? ? ? ? 散點圖適用于比較兩個變量,但有時圖中的點太多反而會失去意義。解決該問題的一種方法就是把圖中的點裝箱。就像直方圖可將變量裝箱來創建條形圖一樣,蜂巢圖(hexbin)可以對兩個變量裝箱,顯示他們的頻次分布狀況。之所以使用六邊形是因為它是覆蓋任意兩維平面最有效的形狀。
hexbin=sns.jointplot(x='total_bill',y='tip',data=tips,kind='hex')
hexbin.set_axis_labels(xlabel='Total Bill',ylabel='Tip')
hexbin.fig.suptitle('Hexbin Joint Plot of Total Bill and Tip',fontsize=10,y=1.03)
6、2D密度圖
fig,ax=plt.subplots()
ax=sns.kdeplot(x='total_bill',y='tip',data=tips,fill=True)
ax.set_title("Kernel Density Plot of Total Bill and Tip")
ax.set_xlabel('Total Bill')
ax.set_ylabel('Tip')
kde_joint=sns.jointplot(x='total_bill',y='tip',data=tips,kind='kde',fill=True)
7、條形圖
? ? ? ? 條形圖也可以用用于展現多個變量。barplot默認會計算平均值,也可以把某個統計函數傳遞給estimator參數。比如把numpy.std函數傳給它來計算標準差。
fig,ax=plt.subplots()
ax=sns.barplot(x='time',y='total_bill',data=tips)
ax.set_title('Bar plot of average total bill for time of day')
ax.set_xlabel('Time of day')
ax.set_ylabel('Average total bill')
8、箱線圖
? ? ? ? 箱線圖用于顯示多種統計信息:最小值、最大值、中位數、四分位數、以及基于四分位差的離群值等。
fig,ax=plt.subplots()
ax=sns.boxplot(x='time',y='total_bill',data=tips)
ax.set_title('Boxplot of total bill by time of day')
ax.set_xlabel('Time of day')
ax.set_ylabel('Total Bill')
9、小提琴圖
? ? ? ? 箱線圖是經典的數據可視化方法,但可能會掩蓋數據的潛在分布。小提琴圖能顯示與箱線圖相同的值,但它把“箱線”繪成核密度估計。這有助于保留數據的更多可視化信息。
fig,ax=plt.subplots()
ax=sns.violinplot(x='time',y='total_bill',data=tips)
ax.set_title("Violin plot of total bill by time of day")
ax.set_xlabel('Time of day')
ax.set_ylabel('Total Bill')