Matplotlib随记2
之前写了很多关于Matplotlib的基础知识,这次主要讲一下Matplotlib所生成的几个图:散点图,柱状图,等高线图,图片和3D数据
Scatter散点图
在制作Scatter散点图的过程中,我们首先要引入matplotlib.pyplot简写为plt,再引入模块numpy用来产生一些随机的数据。生成1024个呈正态分布的二维数组(平均数是0,方差是1)作为一个数据集,并图像化这个数据集。其中,每一个点的颜色用T来表示:
import matplotlib.pyplot as plt import numpy as npn=1024 #数据大小 X=np.random.normal(0,1,n) #每一个点的X值 Y=np.random.normal(0,1,n) # T=np.arctan2(Y,X)
数据生成完毕之后,我们需要采用scatter来绘制这些点。在这里,我们输入X和Y作为输入点,颜色为T,color map用作默认值,透明度alpha为50%。X轴显示范围定位为(-1.5,1.5),并用xtick()函数来隐藏x坐标轴,ytick()函数来隐藏y坐标轴
plt.scatter(X,Y,s=75,c=T,alpha=.5)plt.xlim(-1.5,1.5) plt.xticks(()) plt.ylim(-1.5,1.5) plt.yticks(())plt.show()
综上,该代码最终产生的结果为:
柱状图
在我们平时的机器学习领域中,柱状图通常有很大的作用,它可以很形象的看到趋势的变化。下面就介绍一下如何利用matplotlib来生成一个柱状图。
首先第一步便是生成数据。我们向上向下分别生成12个数据,X为0到11的整数,Y是相应的均匀分布的随机数据。使用的函数是plt.bar,参数是X和Y:
import matplotlib.pyplot as plt import numpy as npn=12 X=np.arange(n) Y1=(1 - X / float(n)) * np.random.uniform(0.5,1.0,n) Y2=(1 - X / float(n)) * np.random.uniform(0.5,1.0,n)plt.bar(X,+Y1) plt.bar(X,-Y2) plt.xlim(-1,n) plt.xticks(()) plt.ylim(-1.25,1.25) plt.yticks(())plt.show()
这样我们便可以生成柱状图的基本框架。下一步我们需要对该图就颜色和数值进行优化。用facecolor设置主题颜色,edgecolor设置边框颜色。
plt.bar(X,+Y1,facecolor='#9999ff',edgecolor='white') plt.bar(X,-Y2,facecolor='#ff9999',edgecolor='white')
接下来我们用函数plt.text分别在柱体上方(下方)加上数值,用%.2f 保留两位小数,横向居中对齐ha='center',纵向底部(顶部)对齐va='bottom'
for x,y in zip(X,Y1):plt.text(x+0.4,y+0.05,'%.2f' % y,ha='center',va='bottom')for x,y in zip(X,Y2):plt.text(x+0.4,-y-0.05,'%.2f' % y,ha='center',va='bottom')
综上,本部分的所有代码为:
import matplotlib.pyplot as plt import numpy as npn=12 X=np.arange(n) Y1=(1 - X / float(n)) * np.random.uniform(0.5,1.0,n) Y2=(1 - X / float(n)) * np.random.uniform(0.5,1.0,n)plt.bar(X,+Y1,facecolor='#9999ff',edgecolor='white') plt.bar(X,-Y2,facecolor='#ff9999',edgecolor='white')for x,y in zip(X,Y1):plt.text(x+0.4,y+0.05,'%.2f' % y,ha='center',va='bottom')for x,y in zip(X,Y2):plt.text(x+0.4,-y-0.05,'%.2f' % y,ha='center',va='bottom')plt.xlim(-1,n) plt.xticks(()) plt.ylim(-1.25,1.25) plt.yticks(())plt.show()
所产生的结果为:
等高线图
在本部分,我们主要介绍如何利用matplotlib生成等高线。在生成等高线中,我们需要三维的数据点:(x,y)和对应的高度。在本程序中,高度我们用一个函数f()来生成。x,y分别是在区间[-3,3]中均匀分布的256个值,并用meshgrid在二维平面中将每一个x和每一个y分别对应起来,编织成栅格:
import matplotlib.pyplot as plt import numpy as npdef f(x,y):return (1 - x/2 + x**5 + y**3) * np.exp(-x**2,-y**2)n=256 x=np.linspace(-3,3,n) y=np.linspace(-3,3,n) X,Y=np.meshgrid(x,y)
接下来我们进行颜色填充。使用函数plt.contourf把颜色加进去,位置参数分别为:X,Y,f(X,Y)。透明度0.75,并将f(X,Y)的值对应到color map的暖色组中寻找对应颜色。
plt.contourf(X,Y,f(X,Y),8,alpha=0.75,cmap=plt.cm.hot)
接下来进行等高线绘制。使用plt.contour函数划线。位置参数为 X,Y,f(X,Y)。在我们这里,我们将颜色选为黑色,线条宽度为0.5.现在的结果如下图所示:只有颜色和线条,没有数值Label
C=plt.contour(X,Y,f(X,Y),8,colors='black',linewidth=0.5)
在上面的代码中,我们可以看到,其中的8代表等高线的密集程度,这里被分为10个部分。如果是0,则图像被一分为二。
再下一步,我们需要添加高度数字。我们加入Label,inline控制是否在Label画在线里面,字体大小为10.并将坐标轴隐藏:
plt.clabel(C,inline=True,fontsize=10) plt.xticks(()) plt.yticks(())
所以,在画等高线的所有代码为:
import matplotlib.pyplot as plt import numpy as npdef f(x,y):return (1 - x/2 + x**5 + y**3) * np.exp(-x**2,-y**2)n=256 x=np.linspace(-3,3,n) y=np.linspace(-3,3,n) X,Y=np.meshgrid(x,y)plt.contourf(X,Y,f(X,Y),8,alpha=0.75,cmap=plt.cm.hot) C=plt.contour(X,Y,f(X,Y),8,colors='black',linewidth=0.5)plt.clabel(C,inline=True,fontsize=10) plt.xticks(()) plt.yticks(()) plt.show()
所产生的结果为:
3D数据
在做机器学习的时候,有时候需要绘3D图片来看数据整体的下降趋势。首先在进行3D时除了导入matplotlib,还需要添加一个模块,即3D坐标轴显示,这个包不需要单独安装,python本身就自带的
import matplotlib.pyplot as plt import numpy as np from mpl_toolkits.mplot3d import Axes3D
之后要定义一个图像窗口,在窗口上添加3D坐标轴。
fig=plt.figure() ax=Axes3D(fig)
接下来再给出X值和Y值,并将X值和Y值编织成栅格。每一个(X,Y)点对应的高度值,我们用下面这个函数进行计算:
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)
下一步我们需要做出一个三维曲面,并将一个colormap rainbow填充颜色,之后将三维图像投影到XY平面做一个等高线图。plot 3D 图像:
ax.plot_surface(X,Y,Z,rstride=1,cstride=1,cmap=plt.get_cmap('rainbow'))
其中,rstride 和 cstride分别代表row 和 column的跨度
之后,我们添加XY平面的等高线:
ax.contourf(X,Y,Z,zdir='z',offset=-2,cmap=plt.get_cmap('rainbow'))
如果zdir选择了x,那么效果将会是对于XZ平面的投影。
因此,整个项目的代码为:
import matplotlib.pyplot as plt import numpy as np from 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)ax.plot_surface(X,Y,Z,rstride=1,cstride=1,cmap=plt.get_cmap('rainbow'))ax.contourf(X,Y,Z,zdir='z',offset=-2,cmap=plt.get_cmap('rainbow'))plt.show()
最终的效果图为:
本知识学自于:莫烦python
转载于:https://www.cnblogs.com/huanggen/p/7533088.html
Matplotlib随记2相关推荐
- Matplotlib随记1
Matplotlib概况 在我们进行机器学习分析的时候,通常需要将我们所需要的结果进行图像化表示出来,以方便我们可以更加形象的看到数据变化大趋势.在我进行寻找相应的工具时,我发现了Matplotlib ...
- 【python学习】matplotlib图例分开显示
图例拆散 图例默认显示 图例分开显示 在绘图时一般会默认将所有图例放在一个框里,但有时为了让图形美观,想要把图例分开显示.这时便需要使用两次legend,将需要分开的图例分别保存在不同的变量中,每调用 ...
- Datawhale 人工智能培养方案
版本号:V0.9 阅读须知 每个专业方向对应一个课程表格 课程表格里的课程排列顺序即为本培养方案推荐的学习顺序 诚挚欢迎为本培养方案贡献课程,有意向的同学请联系Datawhale开源项目管理委员会 本 ...
- 痞子衡嵌入式:语音处理工具Jays-PySPEECH诞生记(3)- 音频显示实现(Matplotlib, NumPy1.15.0)...
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是语音处理工具Jays-PySPEECH诞生之音频显示实现. 音频显示是Jays-PySPEECH的主要功能,Jays-PySPEECH借 ...
- python踩坑记(使用matplotlib绘制折线图遇到的问题及解法)
前几天老妹说毕设中图表部分是通过excel直接生成的,可能在答辩时候会显得很low,让我教教她怎么用python来画图.看了她的毕设,其实不难处理,就是两个折线图.这也让我松了一口气,毕竟快两年没有写 ...
- 痞子衡嵌入式:语音处理工具pzh-speech诞生记(3)- 音频显示实现(Matplotlib, NumPy1.15.0)...
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是语音处理工具pzh-py-speech诞生之音频显示实现. 音频显示是pzh-py-speech的主要功能,pzh-py-speech借 ...
- python画图中文显示_解决Linux系统中python matplotlib画图的中文显示问题
最近想学习一些python数据分析的内容,就弄了个爬虫爬取了一些数据,并打算用Anaconda一套的工具(pandas, numpy, scipy, matplotlib, jupyter)等进行一些 ...
- python画图-Python 绘图,我只用 Matplotlib(二)
图片来自 unsplash 上篇文章,我们了解到 Matplotlib 是一个风格类似 Matlab 的基于 Python 的绘图库.它提供了一整套和matlab相似的命令API,十分适合交互式地进行 ...
- python科学计算三剑客_《Python数据分析三剑客:Pandas、Numpy、Matplotlib》专题
0 2019-10-07 矩阵 1. 矩阵初始化 Numpy函数库中存在两种不同的数据类型(矩阵matrix和数组array),都可以用于处...[作者空间] 20 2019-08-18 Matplo ...
最新文章
- 独家 | 准备数据时如何避免数据泄漏
- Science:领导决策的计算和神经生物学基础
- 帮我看看这个是什么意思 c++代码
- [NOI2016]区间-线段树
- 如何下载 Intel Integrated Performance Primitives –intel IPP
- 算法之如何进行算法复杂度分析
- oracle expdp数据到txt,[20130727]ORACLE 12C使用expdp导出view数据.txt
- Python是什么?Python能干什么?一篇文章让你对Python了如指掌!!
- 前后端分离之权限验证
- c语言乐谱编辑软件怎么用的,雅乐简谱这个软件怎么使用?
- 《电脑商情报》国内信号最强,有效距离最远的四种无线网卡
- python实现局域网内使用TCP服务器传输文件
- vue3 script setup写法
- 微信小程序语音转文字demo
- 第二季:9.生产环境服务器变慢,诊断思路和性能评估谈谈?【Java面试题】
- gic_architecture_specification解读一
- Pytorch应用训练好的模型
- C# 绘制验证码图片
- 计算机信息技术基础...,计算机信息技术基础
- hhuoj:1398 红与黑