博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python绘制六种可视化图表详解(建议收藏)
阅读量:5886 次
发布时间:2019-06-19

本文共 4865 字,大约阅读时间需要 16 分钟。

公众号:Python编程时光

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

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

01. 折线图

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

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

import numpy as npimport matplotlib.pyplot as pltx= 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()复制代码

show image

02. 散点图

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

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

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

show image

03. 直方图

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

import numpy as npimport matplotlib.pyplot as pltnp.random.seed(19680801)mu1, sigma1 = 100, 15mu2, sigma2 = 80, 15x1 = 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()复制代码

show image

04. 柱状图

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

4.1 并列柱状图

import numpy as npimport matplotlib.pyplot as pltsize = 5a = 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()复制代码

show image

4.2 叠加柱状图

import numpy as npimport matplotlib.pyplot as pltsize = 5a = 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()复制代码

show image

05. 饼图

5.1 普通饼图

import matplotlib.pyplot as pltlabels = '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()复制代码

show image

5.2 嵌套饼图

import numpy as npimport matplotlib.pyplot as plt# 设置每环的宽度size = 0.3vals = 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()复制代码

show image

5.3 极轴饼图

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

import numpy as npimport matplotlib.pyplot as pltnp.random.seed(19680801)N = 10theta = 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()复制代码

show image

06. 三维图

6.1 绘制三维散点图

import numpy as npimport matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3Ddata = 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()复制代码

show image

6.2 绘制三维平面图

from matplotlib import pyplot as pltimport numpy as npfrom mpl_toolkits.mplot3d import Axes3Dfig = 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()复制代码

show image


转载地址:http://qllix.baihongyu.com/

你可能感兴趣的文章
gitbook 入门教程之使用 gitbook.com 在线开发电子书
查看>>
每周一个 Python 模块 | json
查看>>
讲个大部分数据结构和算法教科书中都不会讲的问题
查看>>
mysql优化 | 存储引擎,建表,索引,sql的优化建议
查看>>
阿里P7级架构师总结Spring核心模块及功能汇总
查看>>
Java初学者最佳的学习方法以及会遇到的坑(内含学习资料)!
查看>>
前端开发笔记
查看>>
332 Reconstruct Itinerary[PriorityQueue]
查看>>
java B2B2C 源码 多级分销springmvc mybatis多租户电子商城系统---服务网关zuul
查看>>
2022年杭州亚运会会徽的设计方案
查看>>
masonry 使用 UIView 的动画
查看>>
Java7/8 中的 HashMap 和 ConcurrentHashMap 全解析
查看>>
java springcloud版b2b2c社交电商spring cloud分布式微服务 (四) 断路器(Hystrix)
查看>>
Coinbase调查发现,BCH上市前没有发生不当交易
查看>>
JAVA 多用户商城系统b2b2c-Spring Cloud组件
查看>>
技术文档编写心得
查看>>
RecycleView
查看>>
一致性哈希算法(consistent hashing)
查看>>
处理远程登录到linux/unix下退格键显示为^H方法
查看>>
Varnish
查看>>