参考资料:活用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')