
作者:迈克尔·贝耶勒(Michael Beyeler)
如需转载请联系华章 科技
如果已安装Anaconda Python版本,就已经安装好了可以使用的 Matplotlib。否则,可能要访问官网并从中获取安装说明:
http://matplotlib.org
正如使用np作为 NumPy 的缩写,我们将使用一些标准的缩写来表示 Matplotlib 的引入:
在本书中,plt接口会被频繁使用。
让我们创建第一个绘图。
假设想要画出正弦函数sin(x)的线性图。得到函数在x坐标轴上0≤x<10内所有点的值。我们将使用 NumPy 中的 linspace 函数来在x坐标轴上创建一个从0到10的线性空间,以及100个采样点:
可以使用 NumPy 中的sin函数得到所有x点的值,并通过调用plt中的plot函数把结果画出来:
你亲自尝试了吗?发生了什么吗?有没有什么东西出现?
实际情况是,取决于你在哪里运行脚本,可能无法看到任何东西。有下面几种可能性:
1. 从.py脚本中绘图
如果从一个脚本中运行 Matplotlib,需要加上下面的这行调用:
在脚本末尾调用这个函数,你的绘图就会出现!
2. 从 IPython shell 中绘图
这实际上是交互式地执毕扒缓行Matplotlib最方便的方式。为了让绘图出现,需要在启动 IPython 后使用所谓的%matplotlib魔法命令。
接下来,无须每次调用plt.show()函数,所有的绘图将会自动出现。
3. 从 Jupyter Notebook 中绘图
如果你是从基于浏览器的 Jupyter Notebook 中看这段代码,需要使用同样的%matplotlib魔法命令。然而,也可以直接在notebook中嵌入图形,这会有两种输出选项:
在本书中,将会使用inline选项:
现在再次尝试一下:
上面的命令会得到下面的绘图输出结果:
如果想要把绘图保存下来留作以后使用,可以直接在 IPython 或者 Jupyter Notebook 使用下面的命令保存:
仅需要确保你使用了支持的文件后缀,比如.jpg、.png、.tif、.svg、.eps或者.pdf。
作为本章最后一个测试,让我们对外部数据集进行可视化,比如scikit-learn中的数字数据集。
为此,需要三个可视化工具:
那么开始引入这些包吧:
第一步是载入实际数据:
如果没记错的话,digits应该有两个不同的数据域:data域包含了真正的图像数据,target域包含了图像的标签。相对于相信我们的记忆,我们还是应该对digits稍加 探索 。输入它的名字,添加一个点号,然后按Tab键:digits.<TAB>,这个 *** 作将向我们展示digits也包含了一些其他的域,比如一个名为images的域。images和data这两个域,似乎简单从形状上就可以区分。
两种情况中,第一维对应的都是数据集中的图像数量。然而,data中所有像素都在一个大的向量中排列,而images保留了各个图像8×8的空间排列。
因此,如果想要绘制出一副单独的图像,使用images将更加合适。首先,使用NumPy的数组切片从数据集中获取一幅图像:
这里是从1797个元素的数组中获取了它的第一行数据,这行数据对应的是8×8=64个像素。下面就可以使用plt中的imshow函数来绘制这幅图像:
上面的命令得到下面的输出:
此外,这里也使用cmap参数指定了一个颜色映射。默认情况下,Matplotlib 使用MATLAB默认的颜色映射jet。然而,在灰度图像的情况下,gray颜色映射更有效。
最后,可以使用plt的subplot函数绘制全部数字的样例。subplot函数与MATLAB中的手模函数一样,需要指定行数、列数以及当前的子绘图索引(从1开始计算)。我们将使用for 循环在数据集中迭代出前十张图像,每张图像都分配到一个单独的子绘图中。
这会得到下面的输出结果:此坦
关于作者:Michael Beyeler,华盛顿大学神经工程和数据科学专业的博士后,主攻仿生视觉计算模型,用以为盲人植入人工视网膜(仿生眼睛),改善盲人的视觉体验。 他的工作属于神经科学、计算机工程、计算机视觉和机器学习的交叉领域。同时他也是多个开源项目的积极贡献者。
本文摘编自《机器学习:使用OpenCV和Python进行智能图像处理》,经出版方授权发布。
matplotlib.pyplot 是一个像Matlab一样工作的命令集合,每一个 pyplot 函数都对图标做出一些变更: 创建图表/创建图表绘制区域/绘制线条/绘制标签,`pyplot 的目的是交互式绘制和简单的自动化绘制。
Matplotlib的核心是面向对象的,如果需要更多的控制和自定义绘制,我们建议直接使用对象工作。
很多情况下,你可以使用 pyplot.subplots 创建一尘明个 Figure 和很多的 Axes , 然后使用这些对象工作,同样也可以显式的创建 Figure (GUI应用中)。
matplotlib.pylab 模块在一个单独的命名空间包含 matplotlib.pyplot , numpy 和 其他的函数,初始目的是 通过导入所有的函数到全局命名空间来模仿一个类Matlab的工作方式。
所有绘图元素最顶层的容器
图表实例支持回调,通过 callbacks (CallbackRegistry实例) 属性
matplotlib.pyplot.plot(* args , scalex=True , scaley=True , data=None , ** kwargs )
绘制线和标记
调用方法
点或线的坐标通过 x/y 给出,
可选参数 fmt 是一个字符串标识,可以方便的定义颜色、标记、线型
可以使用 Line2D 属性作为关键字在外形上控制更多,线属性和 fmt 可以混合使用
使用 fmt 时,关键字参数优先生效
参数
x y
可以是数组或整数,x是可选的,若无值则默认[0 ,..., N-1]
fmt
可选的字符串,是快速设置线的属性的一个缩写,所有属性均可以由关键字参数控制
data
可索引对象,可选,标签数据对象,提供标签名称以绘制x y 坐标轴
返回值
lines
代表绘制数据的 Line2D 对象列表裤中
fmt
包含颜色、标记、线的格式化字符串,每一项都是可选的,如果没有提供某项则使用周期循环中的值
fmt = '[color][marker][line]'
color 支持的颜色派纯告
Markers
Line Style
matplotlib.pyplot.subplots(nrows=1, ncols=1, sharex=False, sharey=False,squeeze=True, subplot_kw=None, gridspec_kw=None, **fig_kw)
创建一个图表和一组绘图区域
nrows, ncols 绘图区域网格的行列,默认1行1列
sharex, sharey: bool or {'none', 'all', 'row', 'col'}, default: False 控制多个绘图区域是否共用x、y坐标轴属性
class matplotlib.axes.Axes( fig, rect , facecolor=None , frameon=True , sharex=None , sharey=None , label='' , xscale=None , yscale=None , ** kwargs )
Axes 包含很多元素:坐标轴、刻度、2D线、文本、多边形
参考链接:https://www.jianshu.com/p/b2f70f867a4a
箱线图,又称箱形图(boxplot)或盒式图,不同于一般的折线图、柱状图或饼图等传统图表,只是数据大小、占比、趋势等等的呈现,其包含一些统计学的均值、分位数、极值等等统计量,因此,该图信息量较大,不仅能够分析不同类别数据平均水平差异(需在箱线图中加入前陆帆均值点),还能揭示数据间离散程度、异常值、分布差异等等。
在python中常用matplotlib的boxplot来绘制,最简单绘制的如下:
importnumpyasnpimportmatplotlib.pyplotaspltimportpandasaspdnp.random.seed(2)#设置随机种子df = pd.DataFrame(np.random.rand(5,4),columns=['A','B','C','D'])#先生成0-1之间的5*4维度数据,再装入4列DataFrame中df.boxplot()#也可用plot.box()plt.show()
Paste_Image.png
从图形可以看出,A、B、C、D四组数A、D数据较集中(大部分在上下四分位箱体内),但都有异常值,C的离散程度最大(最大值与最小值之间距离),以均值为中心,B分布都有明显右偏(即较多的值分布在均值的右侧),A、C则有明显左偏。
(2)
从分析的角度来说,上面boxplot最初始图形已经够用,但是在matplotlib库下boxplot函数中包含n多参数,涉及到对框的颜色及形状、线段线型、均值线、异常点的形状大小等等设置,由于大多并不常用,用了几个常用参数,作图如下:
df.boxplot(sym='r*',vert=False,patch_artist=True,meanline=False,showmeans=True)plt.show()
Paste_Image.png
其中,sym='r*',表示异常点的形状,
vert=False,表示横向还是竖向(True),,
patch_artist=True,(上下四分位框内是否填充,True为填充)
meanline=False,showmeans=True,慧雹是否有均值线及其形状,meanline=True时,均值线也像中位数线一样是条红色线段,这样容易与中位数线混淆。
另外,还有其他参数,比如notch表示中间箱体是否缺口,whis为设置数据的范围,showcaps、showbox是否显示边框,可以参见
http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.boxplot ,如该网页中图形:
Paste_Image.png
左上图是默认图形,中上、右上是显示均值点及形状,左下是是否显示箱体边框,中下是带缺口的箱体,右下是是否显示异常值。
(3)
前边说过,很多悉拿参数使用很少,但对于图形来说,可能还能用到的就是美化,比如各条线的颜色,粗细程度等等。这里可用for循环来构造。
f=df.boxplot(sym='r*',patch_artist=True)forboxinf['boxes']:# 箱体边框颜色box.set( color='#7570b3', linewidth=2)# 箱体内部填充颜色box.set( facecolor ='#1b9e77')forwhiskerinf['whiskers']: whisker.set(color='r', linewidth=2)forcapinf['caps']: cap.set(color='g', linewidth=3)formedianinf['medians']: median.set(color='DarkBlue', linewidth=3)forflierinf['fliers']: flier.set(marker='o', color='y', alpha=0.5)plt.show()
Paste_Image.png
其中,boxes, 是25分位值和75分位值构成的box,
medians, 是中位值的横线, 每个median是一个Line2D对象
whiskers, 是指从box 到error bar之间的竖线.
fliers, 是指error bar线之外的离散点.
caps, 是指error bar横线.
means, 是均值的横线,
(4)
还可以做子图,如我们在最开始的DataFrame数据中加入分类数据列:
df['E'] = np.random.choice(['X','Y'], size=20)#加入以X、Y随机分类的E列print(df)plt.figure()df.boxplot(by='E')plt.show()
Paste_Image.png
这样我们就可以比较,不同类别X、Y在同一列下的数据分布情况及其差异。
链接:https://www.jianshu.com/p/b2f70f867a4a
来源:
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)