Python数据可视化教程之Matplotlib实现各种图表实例


Posted in Python onJanuary 13, 2019

前言

数据分析就是将数据以各种图表的形式展现给领导,供领导做决策用,因此熟练掌握饼图、柱状图、线图等图表制作是一个数据分析师必备的技能。Python有两个比较出色的图表制作框架,分别是Matplotlib和Pyechart。本文主要讲述使用Matplotlib制作各种数据图表。

Matplotlib是最流行的用于绘制2D数据图表的Python库,能够在各种平台上使用,可以绘制散点图、柱状图、饼图等。

1、柱状图

是一种以长方形或长方体的高度为变量的表达图形的统计报告图,由一系列高度不等的纵向条纹表示数据分布的情况,用来比较两个或以上的价值(不同时间或者不同条件),只有一个变量,通常利用于较小的数据集分析。柱状图可以用来比较数据之间的多少,可以用来观察某一事件的变化趋势,柱状图亦可横向排列,或用多维方式表达。

实现代码:

# 导入绘图模块
import matplotlib.pyplot as plt
# 构建数据
sales = [7125,12753,13143,8635]

# 中文乱码的处理,rcParams也可以用于设置图的分辨率,大小等信息
plt.rcParams['font.sans-serif'] =['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 绘图,第一个参数是x轴的数据,第二个参数是y轴的数据,第三个参数是柱子的大小,默认值是1(值在0到1之间),color是柱子的颜色,alpha是柱子的透明度
plt.bar(range(4), sales, 0.4,color='r', alpha = 0.8)
# 添加轴标签
plt.ylabel('销量')
# 添加标题
plt.title('水果2018年度销量')
# 添加刻度标签
plt.xticks(range(4),['苹果','香蕉','梨','猕猴桃'])
# 设置Y轴的刻度范围
plt.ylim([5000,15000])

# 为每个条形图添加数值标签
for x,y in enumerate(sales):
 plt.text(x,y+100,'%s' %y,ha='center')

# 显示图形
plt.show()

效果图:

Python数据可视化教程之Matplotlib实现各种图表实例

只需绘制柱状图的函数bar()改成barh()就可以将柱状图长方形或长方体从垂直方向变为水平方向。

实现代码:

# 导入绘图模块
import matplotlib.pyplot as plt
# 构建数据
sales = [7125,12753,13143,8635]

# 中文乱码的处理
plt.rcParams['font.sans-serif'] =['SimHei']
plt.rcParams['axes.unicode_minus'] = False

x = ['苹果','香蕉','梨','猕猴桃']
# 绘图
plt.barh(range(4), sales, 0.4,color='r', alpha = 0.8)
# 添加轴标签
plt.ylabel('销量')
# 添加标题
plt.title('水果2018年度销量')
# 添加刻度标签
plt.yticks(range(4),['苹果','香蕉','梨','猕猴桃'])
# 设置Y轴的刻度范围
plt.xlim([5000,15000])

# 为每个条形图添加数值标签
for x,y in enumerate(sales):
 plt.text(y+0.2,x,'%s' %y,va='center')

# 显示图形
plt.show()

效果图:

Python数据可视化教程之Matplotlib实现各种图表实例

除了bar()函数变成barh()之外。还有其他几个地方要做修改,在给每个条形图添加数值标签时,将ha='center'改为va='center',将添加x轴标签的方法从xlabel改为ylabel。

柱状图和折线图混合使用

柱状图可以和折线图混合使用,用来表示某一个数据的变化趋势,下面是例子的柱状图表示水果的年度销量,折线图表示水果1月份的销量。

代码:

# 导入绘图模块
import matplotlib.pyplot as plt

jan_sales = [3010,4029,5021,3056]
# 构建数据
sales = [7125,12753,13143,8635]


# 中文乱码的处理
plt.rcParams['font.sans-serif'] =['SimHei']
plt.rcParams['axes.unicode_minus'] = False

x = ['苹果','香蕉','梨','猕猴桃']

plt.plot(x,jan_sales,'r')# 折线 1 x 2 y 3 color
plt.plot(x,jan_sales,'g',lw=5)# 4 line w

# 绘图
plt.bar(range(4), sales, 0.4,color='b', alpha = 0.8)
# 添加轴标签
plt.ylabel('销量')
# 添加标题
plt.title('水果2018年度销量')
# 添加刻度标签
plt.xticks(range(4),['苹果','香蕉','梨','猕猴桃'])
# 设置Y轴的刻度范围
plt.ylim([2000,15000])

# 为每个条形图添加数值标签
for x,y in enumerate(sales):
 plt.text(x,y+100,'%s' %y,ha='center')

# 显示图形
plt.show()

效果图:

Python数据可视化教程之Matplotlib实现各种图表实例

2、折线图

折线图主要用于表示数据变化的趋势。折线图是直线将不同的点连接起来。

# 导入绘图模块
import matplotlib.pyplot as plt

#构建数据
jan_sales = [3010,4029,5021,3056]


# 中文乱码的处理
plt.rcParams['font.sans-serif'] =['SimHei']
plt.rcParams['axes.unicode_minus'] = False

x = ['苹果','香蕉','梨','猕猴桃']

#第一个参数是x轴,第二参数时y轴数据,第三个参数是线的颜色,第二个参数是线条的粗细
plt.plot(x,jan_sales,'r',lw=5)# 4 line w

# 添加标题
plt.title('水果2018年度1月份销量图')
plt.ylim([2000,15000])

# 为每个点添加数值标签
for x,y in enumerate(jan_sales):
 plt.text(x,y+100,'%s' %y,ha='center')

# 显示图形
plt.show()

效果图:

Python数据可视化教程之Matplotlib实现各种图表实例

折线图通过调用plot()方法绘制。

3、饼图

饼图主要是用来表示数据的占比,给人一眼就可以看出数据的占比大小。饼图使用pie()函数绘制。

import matplotlib.pyplot as plt

# 设置绘图的主题风格(不妨使用R中的ggplot分隔)
plt.style.use('ggplot')

# 构造数据
edu = [0.2515,0.3724,0.3336,0.0368,0.0057]
labels = ['苹果','香蕉','梨','猕猴桃','桔子']

explode = [0,0.1,0,0,0] # 用于突出显示大专学历人群
colors=['#FEB748','#EDD25D','#FE4F54','#51B4FF','#dd5555'] # 自定义颜色

# 中文乱码和坐标轴负号的处理
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 将横、纵坐标轴标准化处理,保证饼图是一个正圆,否则为椭圆
plt.axes(aspect='equal')

# 控制x轴和y轴的范围
plt.xlim(0,4)
plt.ylim(0,4)

# 绘制饼图
plt.pie(x = edu,# 绘图数据
 explode=explode, # 突出显示香蕉人群
 labels=labels, # 添加水果销量水平标签
 colors=colors, # 设置饼图的自定义填充色
 autopct='%.1f%%', # 设置百分比的格式,这里保留一位小数
 pctdistance=0.8,# 设置百分比标签与圆心的距离
 labeldistance = 1.15, # 设置销量水平标签与圆心的距离
 startangle = 180, # 设置饼图的初始角度
 radius = 1.5, # 设置饼图的半径
 counterclock = False, # 是否逆时针,这里设置为顺时针方向
 wedgeprops = {'linewidth': 1.5, 'edgecolor':'green'},# 设置饼图内外边界的属性值
 textprops = {'fontsize':12, 'color':'k'}, # 设置文本标签的属性值
 center = (1.8,1.8), # 设置饼图的原点
 frame = 1)# 是否显示饼图的图框,这里设置显示

# 删除x轴和y轴的刻度
plt.xticks(())
plt.yticks(())
# 添加图标题
plt.title('2018年水果销量分析')

# 显示图形
plt.show()

效果图:

Python数据可视化教程之Matplotlib实现各种图表实例

简单介绍下pie函数参数:

  • x: 指定绘图的数据
  • explode:指定饼图某些部分的突出显示,即呈现爆炸式
  • labels:为饼图添加标签说明,类似于图例说明
  • colors:指定饼图的填充色
  • autopct:设置百分比格式,如'%.1f%%'为保留一位小数
  • shadow:是否添加饼图的阴影效果
  • pctdistance:设置百分比标签与圆心的距离
  • labeldistance:设置各扇形标签(图例)与圆心的距离;
  • startangle:设置饼图的初始摆放角度, 180为水平;
  • radius:设置饼图的半径大小;
  • counterclock:是否让饼图按逆时针顺序呈现, True / False;
  • wedgeprops:设置饼图内外边界的属性,如边界线的粗细、颜色等, 如wedgeprops = {'linewidth': 1.5, 'edgecolor':'green'}
  • textprops:设置饼图中文本的属性,如字体大小、颜色等;
  • center:指定饼图的中心点位置,默认为原点
  • frame:是否要显示饼图背后的图框,如果设置为True的话,需要同时控制图框x轴、y轴的范围和饼图的中心位置;

4、散点图

散点图主要的作用是判断两个变量之间关系的强弱或者是否存在关系。

散点图由scatter()方法绘制。

import numpy as np
import matplotlib.pyplot as plt

# 数据个数
n = 50
# 均值为0, 方差为1的随机数
x = np.random.normal(0, 1, n)
y = np.random.normal(0, 1, n)

# 计算颜色值
color = np.arctan2(y, x)
# 绘制散点图
plt.scatter(x, y, s = 75, c = color, alpha = 0.5)
# 设置坐标轴范围
plt.xlim((-1.5, 1.5))
plt.ylim((-1.5, 1.5))

# 不显示坐标轴的值
plt.xticks(([-1,0,1,2,3,4]))
plt.yticks(([-1,0,1,2,3,4]))

plt.show()

效果图:

Python数据可视化教程之Matplotlib实现各种图表实例

5、箱线图

箱线图一般用来展现数据大小、占比、趋势等等的呈现,其包含一些统计学的均值、分位数、极值等等统计量,因此,该图信息量较大,不仅能够分析不同类别数据平均水平差异(需在箱线图中加入均值点),还能揭示数据间离散程度、异常值、分布差异等等。

使用boxplot()方法绘制。

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
np.random.seed(2) #设置随机种子
df = pd.DataFrame(np.random.rand(5,4),
columns=['A', 'B', 'C', 'D'])#先生成0-1之间的5*4维度数据,再装入4列DataFrame中
df.boxplot() #也可用plot.box()
plt.show()

效果图:

Python数据可视化教程之Matplotlib实现各种图表实例

6、雷达图

雷达图可以用来显示一个周期数值的变化,也可以用来展示对个对象/维度之间的关系

import numpy as np
import matplotlib.pyplot as plt

#标签
labels = np.array(['语文','数学','英语','生物','物理','化学'])
#数据个数
dataLenth = 6
#数据
data = np.array([7,4,3,6,4,8])

angles = np.linspace(0, 2*np.pi, dataLenth, endpoint=False)
data = np.concatenate((data, [data[0]])) # 闭合
angles = np.concatenate((angles, [angles[0]])) # 闭合

fig = plt.figure()
ax = fig.add_subplot(111, polar=True)# polar参数!!
ax.plot(angles, data, 'bo-', linewidth=2)# 画线
ax.fill(angles, data, facecolor='r', alpha=0.25)# 填充
ax.set_thetagrids(angles * 180/np.pi, labels, fontproperties="SimHei")
ax.set_title("matplotlib雷达图", va='bottom', fontproperties="SimHei")
ax.set_rlim(0,10)
ax.grid(True)
plt.show()

效果图:

Python数据可视化教程之Matplotlib实现各种图表实例

7、气泡图

气泡图用于判断3个变量之间是否存在某种关系。它跟散点图有点类似,只不过气泡图以气泡大小作为新的维度

import pandas as pd
import matplotlib.pyplot as plt
import pandas as pd

d = {"时间":pd.Series([2006,2007,2008,2009,2010]),
  "数量":pd.Series([10,200,120,150,300]),
  "大小":pd.Series([50,130,40,50,160]),
  "分类":pd.Series([1,2,0,1,2]),
  "判断":pd.Series([True,True,True,True,True])}

df=pd.DataFrame(d)

#先定义气泡大小,rank 函数将大小列进行大小分配,越大的值分配结果也越高
#n 为倍数,用来调节气泡的大小,且看后头

size=df['大小'].rank()
n=20

#定义一个字典,将颜色跟对应的分类进行绑定

color={0:'red',1:'blue',2:'orange'}

#增加color的参数,用列表解析式将data分类中的每个数据的数字映射到前面color的颜色中

plt.scatter(df['数量'],df['大小'],color=[color[i] for i in df['分类']],s=size*n,alpha=0.6)
plt.show()

效果图:

Python数据可视化教程之Matplotlib实现各种图表实例

气泡图用也是scatter方法绘制,和散点图一样。差别在于点的大小不一样,散点图的点都是一样的,而气泡图点的大小不一样。

以上就是柱状图、散点图、气泡图、折线图的实现方式。希望给大伙带来帮助。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
Python中使用OpenCV库来进行简单的气象学遥感影像计算
Feb 19 Python
微信跳一跳辅助python代码实现
Jan 05 Python
Python3爬虫使用Fidder实现APP爬取示例
Nov 27 Python
python+opencv实现高斯平滑滤波
Jul 21 Python
python selenium firefox使用详解
Feb 26 Python
Django中celery执行任务结果的保存方法
Jul 12 Python
python框架django项目部署相关知识详解
Nov 04 Python
tensorflow2.0的函数签名与图结构(推荐)
Apr 28 Python
Python 保存加载mat格式文件的示例代码
Aug 04 Python
如何使用PyCharm引入需要使用的包的方法
Sep 22 Python
python opencv角点检测连线功能的实现代码
Nov 24 Python
python实现录制全屏和选择区域录屏功能
Feb 05 Python
python中使用 xlwt 操作excel的常见方法与问题
Jan 13 #Python
用Python实现大文本文件切割的方法
Jan 12 #Python
python实时获取外部程序输出结果的方法
Jan 12 #Python
python实现控制台打印的方法
Jan 12 #Python
python 自定义对象的打印方法
Jan 12 #Python
python设定并获取socket超时时间的方法
Jan 12 #Python
python 限制函数执行时间,自己实现timeout的实例
Jan 12 #Python
You might like
PHP快速生成各种信息提示框的方法
2016/02/03 PHP
thinkPHP模板中for循环与switch语句用法示例
2016/11/30 PHP
thinkPHP中验证码的简单实现方法
2016/12/05 PHP
ImageFlow可鼠标控制图片滚动
2008/01/30 Javascript
JavaScript性能优化 创建文档碎片(document.createDocumentFragment)
2010/07/13 Javascript
js数组Array sort方法使用深入分析
2013/02/21 Javascript
原生JavaScript编写俄罗斯方块
2015/03/30 Javascript
node.js中格式化数字增加千位符的几种方法
2015/07/03 Javascript
JS自动倒计时30秒后按钮才可用(两种场景)
2015/08/31 Javascript
javascript图片滑动效果实现
2021/01/28 Javascript
js实现C#的StringBuilder效果完整实例
2015/12/22 Javascript
BootStrap智能表单实战系列(三)分块表单配置详解
2016/06/13 Javascript
简单实现js选项卡切换效果
2017/02/09 Javascript
Angular.JS中指令ng-if、ng-show/ng-hide和ng-switch的使用教程
2017/05/07 Javascript
js实现城市级联菜单的2种方法
2017/06/23 Javascript
vue2.0 根据状态值进行样式的改变展示方法
2018/03/13 Javascript
js实现json数组分组合并操作示例
2019/02/12 Javascript
利用 Chrome Dev Tools 进行页面性能分析的步骤说明(前端性能优化)
2021/02/24 Javascript
vc6编写python扩展的方法分享
2014/01/17 Python
python实现根据月份和日期得到星座的方法
2015/03/27 Python
Python时间戳使用和相互转换详解
2017/12/11 Python
python requests指定出口ip的例子
2019/07/25 Python
使用Pandas将inf, nan转化成特定的值
2019/12/19 Python
Django 路由层URLconf的实现
2019/12/30 Python
浅析Python面向对象编程
2020/07/10 Python
Python自动创建Excel并获取内容
2020/09/16 Python
Html5元素及基本语法详解
2016/08/02 HTML / CSS
C++是不是类型安全的
2014/02/18 面试题
2014年乡镇植树节活动方案
2014/02/28 职场文书
“学雷锋活动月”总结
2014/03/09 职场文书
新年团拜会主持词
2014/04/02 职场文书
2015元旦家电促销活动策划方案
2014/12/09 职场文书
爱心募捐感谢信
2015/01/22 职场文书
环保建议书作文500字
2015/09/14 职场文书
导游词之南京夫子庙
2019/12/09 职场文书
python如何将mat文件转为png
2022/07/15 Python