Python干货:分享Python绘制六种可视化图表


Posted in Python onAugust 27, 2018

可视化图表,有相当多种,但常见的也就下面几种,其他比较复杂一点,大都也是基于如下几种进行组合,变换出来的。对于初学者来说,很容易被这官网上众多的图表类型给吓着了,由于种类太多,几种图表的绘制方法很有可能会混淆起来。

因此,在这里,我特地总结了六种常见的基本图表类型,你可以通过对比学习,打下坚实的基础。

01. 折线图

绘制折线图,如果你数据不是很多的话,画出来的图将是曲折状态,但一旦你的数据集大起来,比如下面我们的示例,有100个点,所以我们用肉眼看到的将是一条平滑的曲线。

这里我绘制三条线,只要执行三次 plt.plot 就可以了。

import numpy as np
import matplotlib.pyplot as plt
x= np.linspace(0, 2, 100)
plt.plot(x, x, label='linear')
plt.plot(x, x**2, label='quadratic')
plt.plot(x, x**3, label='cubic')
plt.xlabel('x label')
plt.ylabel('y label')
plt.title("Simple Plot")
plt.legend()
plt.show()

Python干货:分享Python绘制六种可视化图表 

02. 散点图

其实散点图和折线图是一样的原理,将散点图里的点用线连接起来就是折线图了。所以绘制散点图,只要设置一下线型即可。

注意:这里我也绘制三条线,和上面不同的是,我只用一个 plt.plot 就可以了。

import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0., 5., 0.2)
# 红色破折号, 蓝色方块 ,绿色三角块
plt.plot(x, x, 'r--', x, x**2, 'bs', x, x**3, 'g^')
plt.show()

Python干货:分享Python绘制六种可视化图表 

03. 直方图

直方图,大家也不算陌生了。这里小明加大难度,在一张图里,画出两个频度直方图。这应该在实际场景上也会遇到吧,因为这样真的很方便比较,有木有?

import numpy as np
import matplotlib.pyplot as plt
np.random.seed(19680801)
mu1, sigma1 = 100, 15
mu2, sigma2 = 80, 15
x1 = mu1 + sigma1 * np.random.randn(10000)
x2 = mu2 + sigma2 * np.random.randn(10000)
# the histogram of the data
# 50:将数据分成50组
# facecolor:颜色;alpha:透明度
# density:是密度而不是具体数值
n1, bins1, patches1 = plt.hist(x1, 50, density=True, facecolor='g', alpha=1)
n2, bins2, patches2 = plt.hist(x2, 50, density=True, facecolor='r', alpha=0.2)
# n:概率值;bins:具体数值;patches:直方图对象。
plt.xlabel('Smarts')
plt.ylabel('Probability')
plt.title('Histogram of IQ')
plt.text(110, .025, r'$\mu=100,\ \sigma=15$')
plt.text(50, .025, r'$\mu=80,\ \sigma=15$')
# 设置x,y轴的具体范围
plt.axis([40, 160, 0, 0.03])
plt.grid(True)
plt.show()

Python干货:分享Python绘制六种可视化图表 

04. 柱状图

同样的,简单的柱状图,我就不画了,这里画三种比较难的图。

4.1 并列柱状图

import numpy as np
import matplotlib.pyplot as plt
size = 5
a = np.random.random(size)
b = np.random.random(size)
c = np.random.random(size)
x = np.arange(size)
# 有多少个类型,只需更改n即可
total_width, n = 0.8, 3  
width = total_width / n
# 重新拟定x的坐标
x = x - (total_width - width) / 2
# 这里使用的是偏移
plt.bar(x, a, width=width, label='a')
plt.bar(x + width, b, width=width, label='b')
plt.bar(x + 2 * width, c, width=width, label='c')
plt.legend()
plt.show()

Python干货:分享Python绘制六种可视化图表 

4.2 叠加柱状图

import numpy as np
import matplotlib.pyplot as plt
size = 5
a = np.random.random(size)
b = np.random.random(size)
c = np.random.random(size)
x = np.arange(size)
# 这里使用的是偏移
plt.bar(x, a, width=0.5, label='a',fc='r')
plt.bar(x, b, bottom=a, width=0.5, label='b', fc='g')
plt.bar(x, c, bottom=a+b, width=0.5, label='c', fc='b')
plt.ylim(0, 2.5)
plt.legend()
plt.grid(True)
plt.show()

Python干货:分享Python绘制六种可视化图表 

05. 饼图

5.1 普通饼图

import matplotlib.pyplot as plt
labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'
sizes = [15, 30, 45, 10]
# 设置分离的距离,0表示不分离
explode = (0, 0.1, 0, 0) 
plt.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%',
  shadow=True, startangle=90)
# Equal aspect ratio 保证画出的图是正圆形
plt.axis('equal') 
plt.show()

Python干货:分享Python绘制六种可视化图表 

5.2 嵌套饼图

import numpy as np
import matplotlib.pyplot as plt
# 设置每环的宽度
size = 0.3
vals = np.array([[60., 32.], [37., 40.], [29., 10.]])
# 通过get_cmap随机获取颜色
cmap = plt.get_cmap("tab20c")
outer_colors = cmap(np.arange(3)*4)
inner_colors = cmap(np.array([1, 2, 5, 6, 9, 10]))
print(vals.sum(axis=1))
# [92. 77. 39.]
plt.pie(vals.sum(axis=1), radius=1, colors=outer_colors,
  wedgeprops=dict(width=size, edgecolor='w'))
print(vals.flatten())
# [60. 32. 37. 40. 29. 10.]
plt.pie(vals.flatten(), radius=1-size, colors=inner_colors,
  wedgeprops=dict(width=size, edgecolor='w'))
# equal 使得为正圆
plt.axis('equal') 
plt.show()

Python干货:分享Python绘制六种可视化图表 

5.3 极轴饼图

要说酷炫,极轴饼图也是数一数二的了,这里肯定也要学一下。

import numpy as np
import matplotlib.pyplot as plt
np.random.seed(19680801)
N = 10
theta = np.linspace(0.0, 2 * np.pi, N, endpoint=False)
radii = 10 * np.random.rand(N)
width = np.pi / 4 * np.random.rand(N)
ax = plt.subplot(111, projection='polar')
bars = ax.bar(theta, radii, width=width, bottom=0.0)
# left表示从哪开始,
# radii表示从中心点向边缘绘制的长度(半径)
# width表示末端的弧长
# 自定义颜色和不透明度
for r, bar in zip(radii, bars):
 bar.set_facecolor(plt.cm.viridis(r / 10.))
 bar.set_alpha(0.5)
plt.show()

Python干货:分享Python绘制六种可视化图表 

06. 三维图

6.1 绘制三维散点图

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
data = np.random.randint(0, 255, size=[40, 40, 40])
x, y, z = data[0], data[1], data[2]
ax = plt.subplot(111, projection='3d') # 创建一个三维的绘图工程
# 将数据点分成三部分画,在颜色上有区分度
ax.scatter(x[:10], y[:10], z[:10], c='y') # 绘制数据点
ax.scatter(x[10:20], y[10:20], z[10:20], c='r')
ax.scatter(x[30:40], y[30:40], z[30:40], c='g')
ax.set_zlabel('Z') # 坐标轴
ax.set_ylabel('Y')
ax.set_xlabel('X')
plt.show()

Python干货:分享Python绘制六种可视化图表 

6.2 绘制三维平面图

from matplotlib import pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = Axes3D(fig)
X = np.arange(-4, 4, 0.25)
Y = np.arange(-4, 4, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)
# 具体函数方法可用 help(function) 查看,如:help(ax.plot_surface)
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='rainbow')
plt.show()

Python干货:分享Python绘制六种可视化图表 

总结

以上所述是小编给大家介绍的Python绘制六种可视化图表,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
Python天气预报采集器实现代码(网页爬虫)
Oct 07 Python
Python3实现连接SQLite数据库的方法
Aug 23 Python
Python文件和目录操作详解
Feb 08 Python
python3 实现的人人影视网站自动签到
Jun 19 Python
TensorFlow 实战之实现卷积神经网络的实例讲解
Feb 26 Python
对Python字符串中的换行符和制表符介绍
May 03 Python
python读取有密码的zip压缩文件实例
Feb 08 Python
Python快速转换numpy数组中Nan和Inf的方法实例说明
Feb 21 Python
Python 闭包,函数分隔作用域,nonlocal声明非局部变量操作示例
Oct 14 Python
python 实现矩阵按对角线打印
Nov 29 Python
python判断链表是否有环的实例代码
Jan 31 Python
python中前缀运算符 *和 **的用法示例详解
May 28 Python
python使用matplotlib库生成随机漫步图
Aug 27 #Python
Python面向对象之接口、抽象类与多态详解
Aug 27 #Python
python实现随机漫步算法
Aug 27 #Python
Python3随机漫步生成数据并绘制
Aug 27 #Python
python如何生成各种随机分布图
Aug 27 #Python
python随机数分布random测试
Aug 27 #Python
pycharm安装和首次使用教程
Aug 27 #Python
You might like
最新版本PHP 7 vs HHVM 多角度比较
2016/02/14 PHP
Thinkphp结合ajaxFileUpload实现异步图片传输示例
2017/03/13 PHP
非常不错的一个javascript 类
2006/11/07 Javascript
一段非常简单的让图片自动切换js代码
2006/11/10 Javascript
教您去掉ie网页加载进度条的方法
2010/12/09 Javascript
面向对象的Javascript之三(封装和信息隐藏)
2012/01/27 Javascript
javascript 构造函数强制调用经验总结
2012/12/02 Javascript
js触发select onchange事件的小技巧
2014/08/05 Javascript
jquery获取radio值(单选组radio)
2014/10/16 Javascript
jQuery前端分页示例分享
2015/02/10 Javascript
Node.js实用代码段之获取Buffer对象字节长度
2016/03/17 Javascript
只需五句话搞定JavaScript作用域(经典)
2016/07/26 Javascript
Vue.js第一天学习笔记(数据的双向绑定、常用指令)
2016/12/01 Javascript
bootstrap导航条实现代码
2016/12/28 Javascript
原生JS实现层叠轮播图
2017/05/17 Javascript
angular动态删除ng-repaeat添加的dom节点的方法
2017/07/20 Javascript
vue 怎么创建组件及组件使用方法
2017/07/27 Javascript
JavaScript中如何判断一个值的类型
2017/09/15 Javascript
浅谈在vue项目中如何定义全局变量和全局函数
2017/10/24 Javascript
vue+iview写个弹框的示例代码
2017/12/05 Javascript
基于vue 添加axios组件,解决post传参数为null的问题
2018/03/05 Javascript
Vue-cli3.X使用px2 rem遇到的问题及解决方法
2019/08/08 Javascript
[01:14]英雄,所敬略同——2018完美盛典宣传视频
2018/12/05 DOTA
Python获取远程文件大小的函数代码分享
2014/05/13 Python
Python实现保证只能运行一个脚本实例
2015/06/24 Python
Python使用三种方法实现PCA算法
2017/12/12 Python
Python http接口自动化测试框架实现方法示例
2018/12/06 Python
python元组的概念知识点
2019/11/19 Python
法国奢华女性时尚配饰网上商店:Monnier Frères
2016/08/27 全球购物
欧姆龙医疗保健与医疗产品:Omron Healthcare
2020/02/10 全球购物
阿迪达斯中国官网:Adidas中国
2020/12/14 全球购物
家庭教育先进个人事迹材料
2014/01/24 职场文书
市场部业务员岗位职责
2014/04/02 职场文书
一份关于丢失公司财物的检讨书
2014/09/19 职场文书
商业计划书范文
2019/04/24 职场文书
MySQL实现字段分割一行转多行的示例代码
2022/07/07 MySQL