饼图:

饼图属于最传统的统计图形之一,几乎随处可见,例如大型公司的屏幕墙、各种年度论坛的演示稿以及各大媒体发布的数据统计报告等;
饼图是将一个圆分割成不同大小的楔(扇)形,而圆中的每一个楔形代表了不同的类别值,通常根据楔形的面积大小来判断类别值的差异;

1 pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, labeldistance=1.1)
2 
3 # x:指定绘图的数据 
4 # explode:指定饼图某些部分的突出显示,即呈现爆炸式
5 # labels:为饼图添加标签说明,类似于图例说明 
6 # colors:指定饼图的填充色 
7 # autopct:自动添加百分比显示,可以采用格式化的方法显示 
8 # pctdistance:设置百分比标签与圆心的距离 
9 # labeldistance:设置各扇形标签(图例)与圆心的距离
 1 import matplotlib.pyplot as plt # 导入第三方模块
 2 plt.rcParams['font.sans-serif'] = ['SimHei'] # 解决中文乱码情况
 3 
 4 # 构造数据
 5 edu = [0.2515,0.3724,0.3336,0.0368,0.0057]
 6 labels = ['中专','大专','本科','硕士','其他']
 7 explode = [0,0.1,0,0,0]
 8 
 9 # 绘制饼图                                                                              plt.axes(aspect='equal') # 如果python版本较低可能是扁的需要加该代码   
10 plt.pie(x = edu,  # 绘图数据
11         labels=labels,  # 添加教育水平标签
12         autopct='%.1f%%',  # 设置百分比的格式,这里保留一位小数
13         explode = explode
14        )
15 
16 plt.show() # 显示图形

 

条形图(有小分类):

虽然饼图可以很好地表达离散型变量在各水平上的差异,但其不擅长对比差异不大或水平值过多的离散型变量,因为饼图是通过各扇形面积的大小来比价差异的,面积的比较有时并不直观;
对于条形图而言,对比的是柱形的高低,柱体越高,代表的数值越大,反之亦然;

 1 bar(x, height, width=0.8, bottom=None, color=None, edgecolor=None, tick_label=None, label = None, ecolor=None)
 2 
 3 # x:传递数值序列,指定条形图中x轴上的刻度值
 4 #height:传递数值序列,指定条形图y轴上的高度
 5 # width:指定条形图的宽度,默认为0.8
 6 # bottom:用于绘制堆叠条形图
 7 # color:指定条形图的填充色
 8 # edgecolor:指定条形图的边框色
 9 # tick_label:指定条形图的刻度标签
10 # label:指定条形图的标签,一般用以添加图例
 1 '''垂直条形图'''
 2 import pandas as pd
 3 # 读入数据
 4 GDP = pd.read_excel(r'Province GDP 2017.xlsx')
 5 
 6 # 设置绘图风格(不妨使用R语言中的ggplot2风格)
 7 plt.style.use('ggplot')
 8 # 绘制条形图
 9 plt.bar(x = range(GDP.shape[0]), # 指定条形图x轴的刻度值
10         height = GDP.GDP, # 指定条形图y轴的数值
11         tick_label = GDP.Province, # 指定条形图x轴的刻度标签
12         color = 'steelblue', # 指定条形图的填充色
13        )
14 # 添加y轴的标签
15 plt.ylabel('GDP(万亿)')
16 # 添加条形图的标题
17 plt.title('2017年度6个省份GDP分布')
18 # 为每个条形图添加数值标签
19 for x,y in enumerate(GDP.GDP):
20     plt.text(x,y+0.1,'%s' %round(y,1),ha='center')
21 # 显示图形    
22 plt.show()

水平条形图:

 1 # 对读入的数据做升序排序
 2 GDP.sort_values(by = 'GDP', inplace = True)
 3 # 绘制条形图
 4 plt.barh(y = range(GDP.shape[0]), # 指定条形图y轴的刻度值
 5         width = GDP.GDP, # 指定条形图x轴的数值
 6         tick_label = GDP.Province, # 指定条形图y轴的刻度标签
 7         color = 'steelblue', # 指定条形图的填充色
 8        )
 9 # 添加x轴的标签
10 plt.xlabel('GDP(万亿)')
11 # 添加条形图的标题
12 plt.title('2017年度6个省份GDP分布')
13 # 为每个条形图添加数值标签
14 for y,x in enumerate(GDP.GDP):
15     plt.text(x+0.1,y,'%s' %round(x,1),va='center')
16 # 显示图形    
17 plt.show()

交叉条形图:

 1 HuRun = pd.read_excel('HuRun.xlsx')
 2 # Pandas模块之水平交错条形图
 3 HuRun_reshape = HuRun.pivot_table(index = 'City', columns='Year',
 4 values='Counts').reset_index()
 5 # 对数据集降序排序
 6 HuRun_reshape.sort_values(by = 2016, ascending = False, inplace = True)
 7 HuRun_reshape.plot(x = 'City', y = [2016,2017], kind = 'bar', 
 8 color = ['steelblue', 'indianred'], 
 9                               # 用于旋转x轴刻度标签的角度,0表示水平显示刻度标签
10                        rot = 0, 
11                        width = 0.8, title = '近两年5个城市亿万资产家庭数比较')
12 
13 # 添加y轴标签
14 plt.ylabel('亿万资产家庭数')
15 plt.xlabel('')
16 plt.show()

 

 

直方图的绘制:

直方图一般用来观察数据的分布形态,横坐标代表数值的均匀分段,纵坐标代表每个段内的观测数量(频数);
一般直方图都会与核密度图搭配使用,目的是更加清晰地掌握数据的分布特征;

1 plt.hist(x, bins=10, normed=False, orientation='vertical', color=None, label=None)
2 # x:指定要绘制直方图的数据。 
3 # bins:指定直方图条形的个数。
4 # normed:是否将直方图的频数转换成频率
5 # orientation:设置直方图的摆放方向,默认为垂直方向 
6 # color:设置直方图的填充色 
7 # edgecolor:设置直方图边框色 
8 # label:设置直方图的标签,可通过legend展示其图例
 1 Titanic = pd.read_csv('titanic_train.csv')
 2 
 3 # 检查年龄是否有缺失(如果数据中存在缺失值,将无法绘制直方图)
 4 any(Titanic.Age.isnull())
 5 # 不妨删除含有缺失年龄的观察
 6 Titanic.dropna(subset=['Age'], inplace=True)
 7 # 绘制直方图
 8 plt.hist(x = Titanic.Age, # 指定绘图数据
 9          bins = 20, # 指定直方图中条块的个数
10          color = 'steelblue', # 指定直方图的填充色
11          edgecolor = 'black' # 指定直方图的边框色
12          )
13 # 添加x轴和y轴标签
14 plt.xlabel('年龄')
15 plt.ylabel('频数')
16 # 添加标题
17 plt.title('乘客年龄分布')
18 # 显示图形
19 plt.show()

散点图与气泡图:

# 散点图:

如果需要研究两个数值型变量之间是否存在某种关系,例如正向的线性关系,或者是趋势性的非线性关系,那么散点图将是最佳的选择;

 1 scatter(x, y, s=20, c=None, marker='o', alpha=None, linewidths=None, edgecolors=None) 
 2 
 3 # x:指定散点图的x轴数据
 4 # y:指定散点图的y轴数据 
 5 # s:指定散点图点的大小,默认为20,通过传入其他数值型变量,可以实现气泡图的绘制
 6 # c:指定散点图点的颜色,默认为蓝色,也可以传递其他数值型变量,通过cmap参数的色阶表示数值大小
 7 # marker:指定散点图点的形状,默认为空心圆
 8 # alpha:设置散点的透明度
 9 # linewidths:设置散点边界线的宽度
10 # edgecolors:设置散点边界线的颜色
 1 # 读入数据
 2 iris = pd.read_csv(r'iris.csv')
 3 # 绘制散点图
 4 plt.scatter(x = iris.Petal_Width, # 指定散点图的x轴数据
 5             y = iris.Petal_Length, # 指定散点图的y轴数据
 6             color = 'steelblue' # 指定散点图中点的颜色
 7            )
 8 
 9 # 添加x轴和y轴标签
10 plt.xlabel('花瓣宽度')
11 plt.ylabel('花瓣长度')
12 # 添加标题
13 plt.title('鸢尾花的花瓣宽度与长度关系')
14 # 显示图形
15 plt.show()

# 气泡图:

气泡图的实质就是通过第三个数值型变量控制每个散点的大小,点越大,代表的第三维数值越高,反之亦然;

气泡图的绘制,使用的仍然是scatter函数,区别在于函数的s参数被赋予了具体的数值型变量;

热力图:

热力图也称为交叉填充表,图形最典型的用法就是实现列联表的可视化,即通过图形的方式展现两个离散变量之间的组合关系;

 1 # matplotlib绘制热力图不太方便需要借助于seaborn模块
 2 sns.heatmap(data, cmap=None, annot=None, fmt='.2g', annot_kws=None, linewidths=0, linecolor ='white)
 3             
 4 # data:指定绘制热力图的数据集 
 5 # cmap:指定一个colormap对象,用于热力图的填充色
 6 # annot:指定一个bool类型的值或与data参数形状一样的数组,如果为True,就在热力图的每个单元上显示数值 
 7 # fmt:指定单元格中数据的显示格式
 8 # annot_kws:有关单元格中数值标签的其他属性描述,如颜色、大小等 
 9 # linewidths:指定每个单元格的边框宽度 
10 # linecolor:指定每个单元格的边框颜色
 1 import numpy as np
 2 import seaborn as sns
 3 # 读取数据
 4 Sales = pd.read_excel(r'Sales.xlsx')
 5 # 根据交易日期,衍生出年份和月份字段
 6 Sales['year'] = Sales.Date.dt.year
 7 Sales['month'] = Sales.Date.dt.month
 8 # 统计每年各月份的销售总额(绘制热力图之前,必须将数据转换为交叉表形式)
 9 Summary = Sales.pivot_table(index = 'month', columns = 'year', values = 'Sales', aggfunc = np.sum)
10 Summary
11 # 绘制热力图
12 sns.heatmap(data = Summary, # 指定绘图数据
13             cmap = 'PuBuGn', # 指定填充色
14             linewidths = .1, # 设置每个单元格边框的宽度
15             annot = True, # 显示数值
16             fmt = '.1e' # 以科学计算法显示数据
17             )
18 #添加标题
19 plt.title('每年各月份销售总额热力图')
20 # 显示图形
21 plt.show()

箱线图:

箱线图是另一种体现数据分布的图形,通过该图可以得知数据的下须值(Q1-1.5IQR)、下四 分位数(Q1)、中位数(Q2)、均值、上四分位(Q3)数和上须值(Q3+1.5IQR),更重要的是,箱线图还可以发现数据中的异常点;

# 关于下须值、下四分位数、中位数、上四分位数和上须值及异常点的图解:

 

 

 

 

 

 1 plt.boxplot(x, vert=None, whis=None, patch_artist=None, meanline=None, showmeans=None, showcaps=None, showbox=None, showfliers=None, boxprops=None, labels=None, flierprops=None, medianprops=None, meanprops=None, capprops=None, whiskerprops=None)
 2 
 3 # x:指定要绘制箱线图的数据
 4 # vert:是否需要将箱线图垂直摆放,默认垂直摆放
 5 # whis:指定上下须与上下四分位的距离,默认为1.5倍的四分位差
 6 # patch_artist:bool类型参数,是否填充箱体的颜色;默认为False
 7 # meanline:bool类型参数,是否用线的形式表示均值,默认为False
 8 #showmeans:bool类型参数,是否显示均值,默认为False
 9 # showcaps:bool类型参数,是否显示箱线图顶端和末端的两条线(即上下须),默认为True showbox:bool类型参数,是否显示箱线图的箱体,默认为True
10 # showfliers:是否显示异常值,默认为True
11 # boxprops:设置箱体的属性,如边框色,填充色等
12 # labels:为箱线图添加标签,类似于图例的作用
13 # filerprops:设置异常值的属性,如异常点的形状、大小、填充色等
14 # medianprops:设置中位数的属性,如线的类型、粗细等
15 # meanprops:设置均值的属性,如点的大小、颜色等
16 # capprops:设置箱线图顶端和末端线条的属性,如颜色、粗细等
17 # whiskerprops:设置须的属性,如颜色、粗细、线的类型等
 1 Sec_Buildings = pd.read_excel('sec_buildings.xlsx')
 2 # 绘制箱线图
 3 plt.boxplot(x = Sec_Buildings.price_unit, # 指定绘图数据
 4             patch_artist=True, # 要求用自定义颜色填充盒形图,默认白色填充
 5             showmeans=True, # 以点的形式显示均值
 6             boxprops = {'color':'black','facecolor':'steelblue'},# 设置箱体属性,如边框色和填充色
 7             # 设置异常点属性,如点的形状、填充色和点的大小
 8             flierprops = {'marker':'o','markerfacecolor':'red', 'markersize':3,'markeredgecolor':'red'}, 
 9             # 设置均值点的属性,如点的形状、填充色和点的大小
10             meanprops = {'marker':'D','markerfacecolor':'indianred', 'markersize':4}, 
11             # 设置中位数线的属性,如线的类型和颜色
12             medianprops = {'linestyle':'--','color':'orange'}, 
13             labels = [''] # 删除x轴的刻度标签,否则图形显示刻度标签为1
14            )
15 # 添加图形标题
16 plt.title('二手房单价分布的箱线图')
17 # 显示图形
18 plt.show()

折线图:

对于时间序列数据而言,一般都会使用折线图反映数据背后的趋势。通常折线图的横坐标指代日期数据,纵坐标代表某个数值型变量,当然还可以使用第三个离散变量对折线图进行分组处理;

 1 plt.plot(x, y, linestyle, linewidth, color, marker,markersize, markeredgecolor, markerfactcolor,markeredgewidth, label, alpha)
 2 
 3 # x:指定折线图的x轴数据
 4 # y:指定折线图的y轴数据
 5 # linestyle:指定折线的类型,可以是实线、虚线、点虚线、点点线等,默认为实线
 6 # linewidth:指定折线的宽度
 7 # marker:可以为折线图添加点,该参数是设置点的形状
 8 # markersize:设置点的大小
 9 # markeredgecolor:设置点的边框色
10 # markerfactcolor:设置点的填充色
11 # markeredgewidth:设置点的边框宽度
12 # label:为折线图添加标签,类似于图例的作用
 1 %matplotlib  # 以弹框的形式显示图形
 2 # 数据读取
 3 wechat = pd.read_excel(r'wechat.xlsx')
 4 # 绘制单条折线图
 5 plt.plot(wechat.Date, # x轴数据
 6          wechat.Counts, # y轴数据
 7          linestyle = '-', # 折线类型
 8          linewidth = 2, # 折线宽度
 9          color = 'steelblue', # 折线颜色
10          marker = 'o', # 折线图中添加圆点
11          markersize = 6, # 点的大小
12          markeredgecolor='black', # 点的边框色
13          markerfacecolor='brown') # 点的填充色
14 # 获取图的坐标信息
15 ax = plt.gca()
16 # 设置日期的显示格式  
17 date_format = mpl.dates.DateFormatter("%m-%d")  
18 ax.xaxis.set_major_formatter(date_format) 
19 # 设置x轴每个刻度的间隔天数
20 xlocator = mpl.ticker.MultipleLocator(7)
21 ax.xaxis.set_major_locator(xlocator)
22 # 添加y轴标签
23 plt.ylabel('人数')
24 # 添加图形标题
25 plt.title('每天微信文章阅读人数趋势')
26 # 显示图形
27 plt.show()
28 
29 
30 # 绘制两条折线图
31 # 导入模块,用于日期刻度的修改
32 import matplotlib as mpl
33 # 绘制阅读人数折线图
34 plt.plot(wechat.Date, # x轴数据
35          wechat.Counts, # y轴数据
36          linestyle = '-', # 折线类型,实心线
37          color = 'steelblue', # 折线颜色
38          label = '阅读人数'
39          )
40 # 绘制阅读人次折线图
41 plt.plot(wechat.Date, # x轴数据
42          wechat.Times, # y轴数据
43          linestyle = '--', # 折线类型,虚线
44          color = 'indianred', # 折线颜色
45          label = '阅读人次'
46          )
47 # 获取图的坐标信息
48 ax = plt.gca()
49 # 设置日期的显示格式  
50 date_format = mpl.dates.DateFormatter("%m-%d")  
51 ax.xaxis.set_major_formatter(date_format) 
52 # 设置x轴显示多少个日期刻度
53 # xlocator = mpl.ticker.LinearLocator(10)
54 # 设置x轴每个刻度的间隔天数
55 xlocator = mpl.ticker.MultipleLocator(7)
56 ax.xaxis.set_major_locator(xlocator)
57 # 为了避免x轴刻度标签的紧凑,将刻度标签旋转45度
58 plt.xticks(rotation=45)
59 
60 # 添加y轴标签
61 plt.ylabel('人数')
62 # 添加图形标题
63 plt.title('每天微信文章阅读人数与人次趋势')
64 # 添加图例
65 plt.legend()
66 # 显示图形
67 plt.show()

组合图:

工作中往往会根据业务需求,将绘制的多个图形组合到一个大图框内,形成类似仪表板的效果;

 1 plt.subplot2grid(shape, loc, rowspan=1, colspan=1, **kwargs)
 2 
 3 shape:指定组合图的框架形状,以元组形式传递,如2×3的矩阵可以表示成(2,3) 
 4 loc:指定子图所在的位置,如shape中第一行第一列可以表示成(0,0) 
 5 rowspan:指定某个子图需要跨几行
 6 colspan:指定某个子图需要跨几列
 7 
 8 """
 9 # 设置大图框的长和高 plt.figure(figsize = (12,6))
10 # 设置第一个子图的布局
11 ax1 = plt.subplot2grid(shape = (2,3), loc = (0,0))
12 # 设置第二个子图的布局
13 ax2 = plt.subplot2grid(shape = (2,3), loc = (0,1))
14 # 设置第三个子图的布局
15 ax3 = plt.subplot2grid(shape = (2,3), loc = (0,2), rowspan = 2)
16 # 设置第四个子图的布局
17 ax4 = plt.subplot2grid(shape = (2,3), loc = (1,0), colspan = 2)
18 """
 1 # 读取数据
 2 Prod_Trade = pd.read_excel(r'Prod_Trade.xlsx')
 3 # 衍生出交易年份和月份字段
 4 Prod_Trade['year'] = Prod_Trade.Date.dt.year
 5 Prod_Trade['month'] = Prod_Trade.Date.dt.month
 6 
 7 # 设置大图框的长和高
 8 plt.figure(figsize = (12,6))
 9 # 设置第一个子图的布局
10 ax1 = plt.subplot2grid(shape = (2,3), loc = (0,0))
11 # 统计2012年各订单等级的数量
12 Class_Counts = Prod_Trade.Order_Class[Prod_Trade.year == 2012].value_counts()
13 Class_Percent = Class_Counts/Class_Counts.sum()
14 # 绘制订单等级饼图
15 ax1.pie(x = Class_Percent.values, labels = Class_Percent.index, autopct = '%.1f%%')
16 # 添加标题
17 ax1.set_title('各等级订单比例')
18 
19 # 设置第二个子图的布局
20 ax2 = plt.subplot2grid(shape = (2,3), loc = (0,1))
21 # 统计2012年每月销售额
22 Month_Sales = Prod_Trade[Prod_Trade.year == 2012].groupby(by = 'month').aggregate({'Sales':np.sum})
23 # 绘制销售额趋势图
24 Month_Sales.plot(title = '2012年各月销售趋势', ax = ax2, legend = False)
25 # 删除x轴标签
26 ax2.set_xlabel('')
27 
28 # 设置第三个子图的布局
29 ax3 = plt.subplot2grid(shape = (2,3), loc = (0,2), rowspan = 2)
30 # 绘制各运输方式的成本箱线图
31 sns.boxplot(x = 'Transport', y = 'Trans_Cost', data = Prod_Trade, ax = ax3)
32 # 添加标题
33 ax3.set_title('各运输方式成本分布')
34 # 删除x轴标签
35 ax3.set_xlabel('')
36 # 修改y轴标签
37 ax3.set_ylabel('运输成本')
38 
39 # 设置第四个子图的布局
40 ax4 = plt.subplot2grid(shape = (2,3), loc = (1,0), colspan = 2)
41 # 2012年客单价分布直方图
42 sns.distplot(Prod_Trade.Sales[Prod_Trade.year == 2012], bins = 40, norm_hist = True, ax = ax4, hist_kws = {'color':'steelblue'}, kde_kws=({'linestyle':'--', 'color':'red'}))
43 # 添加标题
44 ax4.set_title('2012年客单价分布图')
45 # 修改x轴标签
46 ax4.set_xlabel('销售额')
47 
48 # 调整子图之间的水平间距和高度间距
49 plt.subplots_adjust(hspace=0.6, wspace=0.3)
50 # 图形显示
51 plt.show()

可视化相关模块:

1.matplotlib

2.seaborn

3.highcharts

4.echarts

  pyecharts # 可以通过python代码直接调用

5.ds.js