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 相关文章推荐
Python3 正在毁灭 Python的原因分析
Nov 28 Python
使用Python3中的gettext模块翻译Python源码以支持多语言
Mar 31 Python
Python自定义scrapy中间模块避免重复采集的方法
Apr 07 Python
Django日志模块logging的配置详解
Feb 14 Python
python去除字符串中的换行符
Oct 11 Python
Python抓取框架Scrapy爬虫入门:页面提取
Dec 01 Python
对pandas replace函数的使用方法小结
May 18 Python
了解不常见但是实用的Python技巧
May 23 Python
numpy求平均值的维度设定的例子
Aug 24 Python
Windows下python3安装tkinter的问题及解决方法
Jan 06 Python
Python表达式的优先级详解
Feb 18 Python
python3将变量写入SQL语句的实现方式
Mar 02 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
Laravel框架学习笔记(二)项目实战之模型(Models)
2014/10/15 PHP
php输入数据统一类实例
2015/02/23 PHP
php判断电子邮件是否正确方法
2018/12/04 PHP
用JavaScript脚本实现Web页面信息交互
2006/12/21 Javascript
asp.net+js 实现无刷新上传解析csv文件的代码
2010/05/17 Javascript
简单的前端js+ajax 购物车框架(入门篇)
2011/10/29 Javascript
js在输入框屏蔽按键,只能键入数字的示例代码
2014/01/03 Javascript
判断复选框是否被选中的两种方法
2014/06/04 Javascript
node.js 动态执行脚本
2016/06/02 Javascript
JavaScript提高网站性能优化的建议(二)
2016/07/24 Javascript
JQueryEasyUI之DataGrid数据显示
2016/11/23 Javascript
jQuery根据ID、CLASS、等获取对象的实例
2016/12/04 Javascript
JS实现复制功能
2017/03/01 Javascript
微信小程序中使用javascript 回调函数
2017/05/11 Javascript
jquery easyui如何实现格式化列
2017/07/30 jQuery
webpack-mvc 传统多页面组件化开发详解
2019/05/07 Javascript
Python OS模块常用函数说明
2015/05/23 Python
Python压缩解压缩zip文件及破解zip文件密码的方法
2015/11/04 Python
解决nohup重定向python输出到文件不成功的问题
2018/05/11 Python
python 随机打乱 图片和对应的标签方法
2018/12/14 Python
Python神奇的内置函数locals的实例讲解
2019/02/22 Python
Python安装与基本数据类型教程详解
2019/05/29 Python
PyTorch 对应点相乘、矩阵相乘实例
2019/12/27 Python
NumPy排序的实现
2020/01/21 Python
django列表筛选功能的实现代码
2020/03/27 Python
tensorflow实现将ckpt转pb文件的方法
2020/04/22 Python
详解Python3.8+PyQt5+pyqt5-tools+Pycharm配置详细教程
2020/11/02 Python
ASOS比利时:英国线上零售商及自有品牌
2018/07/29 全球购物
爱尔兰最大的体育零售商:Life Style Sports
2019/06/12 全球购物
英国婴儿产品专家:Samuel Johnston
2020/04/20 全球购物
中职生自荐信
2013/10/13 职场文书
自荐信的禁忌和要点
2013/10/15 职场文书
航空大学应届生求职信
2013/11/10 职场文书
文明礼仪事迹材料
2014/01/09 职场文书
同学会邀请书大全
2014/01/12 职场文书
电工技术比武方案
2014/05/11 职场文书