常见图表
如果数据仅包含一个数值变量(一列数据):
直方图:数据分布
条形高度统计的是频数(个数)或频率。
密度图:数据分布
箱型图:四分位数
注意:为了帮助发现数据里的异常值,
不能直接让上界=最大值,而是
上界= min{最大值,第三四分位数+1.5*四分位距},取更靠近中位数的。
四分位距 = 第三四分位数 - 第一四分位数(箱子长度就是四分位距)
为什么是乘以1.5?因为在理想的正态分布数据中,大约 99.7% 的数据会落在均值左右 3 个标准差的范围内。而
举个例子:
同理,下界=max{最小值,第一四分位数-1.5*四分位距}
小提琴图=密度图+箱型图
置信区间:样本值有多少概率在那个区间内
如果数据仅包含2个变量(两列数据):
散点图:变量之间的相关性
折线图:展示趋势变化
条形图(分类变量+数值变量):各个分类对应的数值
默认情况下,条柱的高度对应所属分类下的所有值的平均值
直方图和条形图外形相似,本质不同。
直方图针对的是一个数值变量,横轴是数值范围,纵轴是切割的小范围对应的数据个数。
条形图针对的是一个数值变量和一个分类变量,横轴是类别,纵轴是对应的数值。
饼图(分类变量+数值变量):各个分类对应的数值之间的比例
引入更多变量:
以散点图为例
引入分类变量:把点绘制成不同颜色,不同颜色代表不同分类
引入数值变量:把点绘制成不同大小,让面积大小去表示数值大小
热力图:两个分类变量组合+一个数值变量
多个图放在一起,互相对比挖掘更多信息:
如何绘制?
**两个可视化库:seaborn 和 matplotlib **
注意:seaborn 本身并没有专门的 show() 方法,需要借助 matplotlib.pyplot 的 show() 方法来显示图形。
这种设计体现了 seaborn 和 matplotlib 的分工。
seaborn以matplotlib为基础,它的主要目的是提供简洁、美观的统计图形绘制接口,让用户可以更方便地创建各种统计图表;
而 matplotlib 作为基础的绘图库,负责图形的底层绘制、管理和显示等操作。
这样的分工使得 seaborn 专注于统计可视化的高级功能,同时又能借助 matplotlib 的强大功能来实现图形的显示和进一步定制。
pip install matplotlib
pip install seaborn
import matplotlib.pyplot as plt(因为大部分功能都在子模块pyplot下)
import seaborn as sns(按惯例写成sns)
假设s1是Series
单数值变量
直方图(Histogram——hist)
sns.histplot(data = s1)
plt.show()
密度图(Kernel Density Plot——kde)
sns.kdeplot(s1)
箱型图(Box Plot——box)
sns.boxplot(s1)
小提琴图(Violin Plot——violin)
sns.violinplot(s1)
假设传入的是DataFrame df1,可以添加参数x,指定为x轴对应数据的列名
一些标签:
设置标题:
plt.title(标题字符串)
设置坐标轴标签:
plt.xlabel(标签字符串)
plt.ylabel(标签字符串)
注意:需要在plt.show()之前设置好
二变量
散点图(Scatter Plot——scatter)
sns.scatterplot(df1,x=“列名1”,y=“列名2”)
也可以写成sns.scatterplot(x=Series1,y=Series2),可以方便联系不同表格的列。
轴标签会自动用列名表示。
折线图(Line Plot——line)
sns.lineplot(df1,x=“列名1”,y=“列名2”)
条形图(Bar Plot——bar)
sns.barplot(df1,x=“分类变量对应的列名”,y=“数值变量对应的列名”)
默认情况下,条柱的高度是所属分类下的所有值的平均值。
若想更改为显示最大值,可以令参数estimator=np.max,赋值为对应的求值函数名。
补充:计数图
sns.countplot(df1,x=“分类变量对应的列名”)
饼图(Pie Plot)
假设有个最喜欢的水果的投票数据,想展示各水果获得票数的比例:
plt.pie(Series1,labels=Series2,
autopct=“%.1f%%”)
注意:传入的是需要计算比例的Series,而不是传入DataFrame,因为这个方法不是Seaborn的,而是Matplotlib的。Seaborn才支持传入整个DataFrame后在指定变量。
labels=Series2,和Series1对应,按顺序展示标签。
autopct="%.1f%%"设置比例数字的格式,
%表示是展示格式的字符串, .1f表示小数点后保留一位小数,%%表示真正的%符号,以此为结尾。(“pct” 是 “percent”(百分比)的缩写)
.0f:整数
更美观的配色:
设置颜色:
color=“blue”,也可以赋值为颜色对应的编码,
比如"#c287c7"
更换色盘(一整套颜色主题):
sns.set_palette(“…”)
pastel——更加清新的彩色粉笔色
crest——青绿色主题的山色
…
多变量
引入分类变量(加颜色)
注意:这里的颜色不应该用color参数(只能改成固定的颜色),而要用hue(色调)。
把hue赋值为分类变量列名,图表就会根据不同变量把点或线或条柱画成不同颜色。
引入数值变量(颜色深浅或点变气泡)
颜色
把hue赋值为数值变量列名:
气泡
**把size参数赋值为一个数值变量,**比如用点的大小表示花瓣长度:
修改图例位置
plt.legend( bbox_to_anchor=(1,1) )
legend(图例),
元组(1,1)表示把图例放在右上位置。
元组第一个数字表示横向位置,0左1右;
第二个数字表示纵向位置,0:顶部和下边框对齐,1:顶部和上边框对齐
热力图(Heat Map)
sns.heatmap(glue, annot=True)
把annot(annotation,标注)参数赋值为True,还能让格子里显示出对应具体数值。
多个图放在一起
以直方图为例,就是调用多次histplot。
因为原本是按照各个图合适的粗细画的,所以需要统一条柱的粗细:bidwidth=0.1,指定每个条柱的宽度。
加图例:label=“…”
还要调用一下plt.legend()才能真正把图例画出来。
对于箱型图和小提琴图,因为横轴并不是表示数值,所以它们会挤在同一条纵线上,
如何解决?把分类变量作为x轴的变量
一行放多个图
绘制子图:
fig, axes = plt.subplots(行数,列数,figsize=(宽,高))
fig对应整个大图,axes对应一系列子图,figsize是对于大图而言的;
在相应的绘图函数中加入参数ax=axes[0],就是表示把该图作为第一个子图。
配对图(Pair Plot):一次性探索变量分布和变量之间的关系
sns.pairplot(DataFrame)
把DataFrame数值变量之间所有的两两关系都绘制出来。
(各变量分布用直方图绘制,不同变量之间的关系用散点图绘制)
增加分类变量: