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入门篇之函数
Oct 20 Python
将Python中的数据存储到系统本地的简单方法
Apr 11 Python
python清除指定目录内所有文件中script的方法
Jun 30 Python
Python实现各种排序算法的代码示例总结
Dec 11 Python
Python用户推荐系统曼哈顿算法实现完整代码
Dec 01 Python
python计算两个矩形框重合百分比的实例
Nov 07 Python
python调用外部程序的实操步骤
Mar 04 Python
python滑块验证码的破解实现
Nov 10 Python
python中的itertools的使用详解
Jan 13 Python
Python TKinter如何自动关闭主窗口
Feb 26 Python
解决pycharm中opencv-python导入cv2后无法自动补全的问题(不用作任何文件上的修改)
Mar 05 Python
Python装饰器如何实现修复过程解析
Sep 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分页显示制作详细讲解
2006/10/09 PHP
解密ThinkPHP3.1.2版本之模块和操作映射
2014/06/19 PHP
浅谈laravel aliases别名的原理
2019/10/24 PHP
一种JavaScript的设计模式
2006/11/22 Javascript
找出字符串中出现次数最多的字母和出现次数精简版
2012/11/07 Javascript
js事件冒泡实例分享(已测试)
2013/04/23 Javascript
js中直接声明一个对象的方法
2014/08/10 Javascript
通过location.replace禁止浏览器后退防止重复提交
2014/09/04 Javascript
javascript实现动态加载CSS
2015/01/26 Javascript
JS+CSS实现感应鼠标渐变显示DIV层的方法
2015/02/20 Javascript
详解Backbone.js框架中的模型Model与其集合collection
2016/05/05 Javascript
扩展bootstrap的modal模态框-动态添加modal框-弹出多个modal框
2017/02/21 Javascript
jQuery 判断元素整理汇总
2017/02/28 Javascript
vue 页面加载进度条组件实例
2018/02/05 Javascript
Js面试算法详解
2018/04/08 Javascript
nodejs高大上的部署方式(PM2)
2018/09/11 NodeJs
vue生命周期与钩子函数简单示例
2019/03/13 Javascript
jquery.pager.js实现分页效果
2019/07/29 jQuery
vue双向绑定数据限制长度的方法
2019/11/04 Javascript
[05:31]DOTA2上海特级锦标赛主赛事第三日RECAP
2016/03/05 DOTA
[57:09]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第一场 1月26日
2021/03/11 DOTA
python实现根据图标提取分类应用程序实例
2014/09/28 Python
在IIS服务器上以CGI方式运行Python脚本的教程
2015/04/25 Python
基于Python 的进程管理工具supervisor使用指南
2016/09/18 Python
Python基于贪心算法解决背包问题示例
2017/11/27 Python
使用EduBlock轻松学习Python编程
2018/10/08 Python
pycharm运行scrapy过程图解
2019/11/22 Python
python3跳出一个循环的实例操作
2020/08/18 Python
Python实现树莓派摄像头持续录像并传送到主机的步骤
2020/11/30 Python
HTML5的Geolocation地理位置定位API使用教程
2016/05/12 HTML / CSS
中英文自我评价语句
2013/12/20 职场文书
应急处置方案
2014/06/16 职场文书
狂人日记读书笔记
2015/06/30 职场文书
golang slice元素去重操作
2021/04/30 Golang
SpringBoot连接MySQL获取数据写后端接口的操作方法
2021/11/02 MySQL
win10系统xps文件怎么打开?win10打开xps文件的两种操作方法
2022/07/23 数码科技