# 前言
初步体验了利用python进行数据分析之后,对于python的绘图功能十分的感兴趣,因此特意学习了pandas数据可视化方面的功能。本博客结合网上其他文章的内容,通过实践、理解、总结而成。在学习的过程中,我这两周更多地学习到的是之前所欠缺的python基础知识,另外最大的收获是会利用python简单的绘制图表。
# 前期准备
# 设置字体和显示中文
pandas在绘图时会显示中文为方块,这时就需要我们手动添加中文字体的名称,我们需要添加字体管理器识别出的字体名称。
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['KaiTi']
mpl.rcParams['font.serif'] = ['KaiTi']
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题,或者转换负号为字符串
import seaborn as sns
sns.set_style("darkgrid",{"font.sans-serif":['KaiTi', 'Arial']}) #这是方便seaborn绘图得时候得字体设置
2
3
4
5
6
7
8
pandas无法显示中文,效果如下
# 包的引入
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
2
3
# 线形图
普通折线图以折线的上升或下降来表示统计数量的增减变化的统计图,叫作折线统计图。折线统计图不仅可以表示数量的多少,而且可以反映同一事物在不同时间里的发展变化的情况,虽然它不直接给出精确的数据(当然你也可以加上去),但是能够显示数据的变化趋势,反映事物的变化情况。
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['KaiTi']
mpl.rcParams['font.serif'] = ['KaiTi']
mpl.rcParams['axes.unicode_minus'] = False
import seaborn as sns
sns.set_style("darkgrid",{"font.sans-serif":['KaiTi', 'Arial']}) #设置字体和显示中文
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
test_dict = {'女生':[1000,2000,5000,2000,4000,3000],'男生':[1500,2300,3500,2400,1900,3000]} #引入数据
line = pd.DataFrame(test_dict,index=['一中','二中','三中','四中','五中','六中']) #设置横坐标
line.plot() #显示折线图
line.plot.line(subplots=True) #显示折线图的子图
plt.show()
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
out
# 条形统计图
条形统计图可以清楚地表明各种数量的多少。条形图是统计图资料分析中最常用的图形。按照排列方式的不同,可分为纵式条形图和横式条形图;按照分析作用的不同,可分为条形比较图和条形结构图。
条形统计图的特点:
(1)能够使人们一眼看出各个数据的大小。
(2)易于比较数据之间的差别。
(3)能清楚的表示出数量的多少。
# 垂直条形图
line.plot.bar() #普通条形图
line.plot.bar(stacked=True) #堆积条形图
line.plot.bar(subplots=True,rot=0) #绘制子图
2
3
out
# 水平条形图
line.plot.barh()
out
# 饼图
适用场景:显示各项的大小与各项总和的比例。适用简单的占比比例图,在不要求数据精细的情况适用。
优势:明确显示数据的比例情况,尤其合适渠道来源分析等场景。
line.plot.pie(subplots=True,figsize=(10, 8),autopct='%.2f%%',radius = 1.2,startangle = 250,legend=False,colormap='viridis')
参数解析:
subplots必要参数,设置为true
figsize图片大小
autopct百分数
radius饼图半径
startangle旋转角度
colormap颜色
out
# 散点图
适用场景:显示若干数据系列中各数值之间的关系,类似XY轴,判断两变量之间是否存在某种关联。散点图适用于三维数据集,但其中只有两维需要比较。
优势:对于处理值的分布和数据点的分簇,散点图都很理想。如果数据集中包含非常多的点,那么散点图便是最佳图表类型。
# 普通散点图
line.plot.scatter(x='男生',y='女生')
out
# 气泡图
test_dict1 = {'女生':[1000,2000,5000,2000,4000,3000],'男生':[1500,2300,3500,2400,1900,3000],'评价数':[20,400,30,50,500,80]}
line1 = pd.DataFrame(test_dict1,index=['一月','二月','三月','四月','五月','六月'])
line1.plot.scatter(x='女生',y='男生',s=line1['评价数'])
2
3
out
# 多组散点图
ax=line1.plot.scatter(x='评价数',y='男生',label='评价-男生',color='c')
line1.plot.scatter(x='评价数',y='女生',label='评价-女生',ax=ax)
2
out
# 面积图
面积图又称区域图,强调数量随时间而变化的程度,也可用于引起人们对总值趋势的注意。堆积面积图还可以显示部分与整体的关系。折线图和面积图都可以用来帮助我们对趋势进行分析,当数据集有合计关系或者你想要展示局部与整体关系的时候,使用面积图为更好的选择。
1、比折线图看起来更加美观。
2、能够突出每个系别所占据的面积,把握整体趋势。
3、不仅可以表示数量的多少,而且可以反映同一事物在不同时间里的发展变化的情况。
4、可以纵向与其他系别进行比较,能够直观地反映出差异。
line.plot.area(stacked=False) #非堆及效果图
line.plot.area() #生成堆积图
2
out
# 箱线图
箱线图作为描述统计的工具之一,其功能有独特之处,主要有以下几点:
- 识别数据异常值。
- 查看偏态和尾重。
- 了解数据的形状。
DataFrame.boxplot(self, column=None, by=None, ax=None, fontsize=None, rot=0, grid=True, figsize=None, layout=None, return_type=None, **kwds)
line.boxplot()
#其实与`line.plot.box()`等价
2
3
out
# 直方图
直方图是数值数据分布的精确图形表示,这是一个连续变量(定量变量)的概率分布的估计。
作用:
1.整理统计数据,了解统计数据的分布特征,即数据分布的集中或离散状况,从中掌握质量能力状态。
2.观察分析生产过程质量是否处于正常、稳定和受控状态以及质量水平是否保持在公差允许的范围内。
test_dict2 = {'泊松分布':np.random.poisson(50,100),'贝塔分布':np.random.beta(5,1,100)*40}
line2 = pd.DataFrame(test_dict2)
line2
line2.hist(figsize=(10,5),bins=20)
2
3
4
out
# 核密度曲线
核密度估计(kernel density estimation,KDE)是根据已知的一列数据(x1,x2,…xn)估计其密度函数的过程,即寻找这些数的概率分布曲线。 画频率直方图就是一种密度估计的方法,这里的“密度”(density)可以感性得理解为一个区间(直方图的组距)内数据数量的多少,右图即为这6个数据的密度曲线(这里简称为密度图),它是左图的外轮廓化,数据量越多,直方图的顶点也越接近一条线。
line2.hist(bins=20)
line2.plot.kde(subplots=True)
line2.plot.density(subplots=True)
2
3
out
# 总结
# pandas绘制的图表的名称
line.plot.line() #折线图
line.plot.line(subplots=True) #折线图的子图
line.plot.bar() #普通条形图
line.plot.bar(stacked=True) #堆积条形图
line.plot.bar(subplots=True,rot=0) #条形图子图
line.plot.barh() #水平条形图
line.plot.pie(subplots=True,figsize=(10, 8),autopct='%.2f%%',radius = 1.2,startangle = 250,legend=False,colormap='viridis') #饼图
line.plot.scatter(x='男生',y='女生') #普通散点图
line.plot.scatter(x='评价数',y='女生',label='评价-女生',ax=ax) #多组散点图
line.plot.area(stacked=False) #非堆及效果图
line.plot.area() #生成堆积图
line.plot.box() #箱线图
line2.hist(figsize=(10,5),bins=20) #直方图
line2.plot.kde(subplots=True)
line2.plot.density(subplots=True) #核密度曲线
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 参数
subplots必要参数,设置为true
figsize图片大小
autopct百分数
radius饼图半径
startangle旋转角度
colormap颜色