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实现简单socket程序在两台电脑之间传输消息的方法
Mar 13 Python
Python中isnumeric()方法的使用简介
May 19 Python
Python3使用turtle绘制超立方体图形示例
Jun 19 Python
如何在Django项目中引入静态文件
Jul 26 Python
pandas中DataFrame修改index、columns名的方法示例
Aug 02 Python
opencv调整图像亮度对比度的示例代码
Sep 27 Python
Python使用gluon/mxnet模块实现的mnist手写数字识别功能完整示例
Dec 18 Python
Python实现自动访问网页的例子
Feb 21 Python
Jupyter notebook设置背景主题,字体大小及自动补全代码的操作
Apr 13 Python
查看已安装tensorflow版本的方法示例
Apr 19 Python
python爬取代理ip的示例
Dec 18 Python
pandas针对excel处理的实现
Jan 15 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中for循环语句的几种变型
2007/03/16 PHP
PHP XML操作类DOMDocument
2009/12/16 PHP
深入PHP许愿墙模块功能分析
2013/06/25 PHP
Windows和Linux中php代码调试工具Xdebug的安装与配置详解
2014/05/08 PHP
php时间戳格式化显示友好的时间函数分享
2014/10/21 PHP
PHP通过curl获取接口URL的数据方法
2018/05/31 PHP
PHP封装XML和JSON格式数据接口操作示例
2019/03/06 PHP
JavaScript中“+=”的应用
2007/02/02 Javascript
用javascript父窗口控制只弹出一个子窗口
2007/04/10 Javascript
html数组字符串拼接的最快方法
2009/09/16 Javascript
seajs1.3.0源码解析之module依赖有序加载
2012/11/07 Javascript
JS操作COOKIE实现备忘记录的方法
2016/04/01 Javascript
jquery自定义插件——window的实现【示例代码】
2016/05/06 Javascript
js微信支付实现代码
2016/12/22 Javascript
Angular.Js中ng-include指令的使用与实现
2017/05/07 Javascript
js中火星坐标、百度坐标、WGS84坐标转换实现方法示例
2020/03/02 Javascript
[01:18]一目了然!DOTA2DotA快捷操作对比第一弹
2014/07/01 DOTA
python在控制台输出进度条的方法
2015/06/20 Python
用python简单实现mysql数据同步到ElasticSearch的教程
2018/05/30 Python
python读取图片任意范围区域
2019/01/23 Python
python之拟合的实现
2019/07/19 Python
python 使用opencv 把视频分割成图片示例
2019/12/12 Python
Python + Requests + Unittest接口自动化测试实例分析
2019/12/12 Python
pytorch 实现tensor与numpy数组转换
2019/12/27 Python
丝芙兰波兰:Sephora.pl
2018/03/25 全球购物
医科大学生毕业的自我评价分享
2013/11/12 职场文书
爱心捐款倡议书范文
2014/05/12 职场文书
主题班会演讲稿
2014/05/22 职场文书
幼儿教师求职信
2014/05/24 职场文书
银行求职信
2014/05/31 职场文书
2014年物业公司工作总结
2014/11/22 职场文书
护士岗位竞聘书
2015/09/15 职场文书
领导激励员工的演讲稿,各种会上用得到,建议收藏
2019/08/13 职场文书
导游词之西安骊山
2019/12/20 职场文书
python库sklearn常用操作
2021/08/23 Python
virtualenv隔离Python环境的问题解析
2022/06/21 Python