前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python可视化库Matplotlib绘图入门详解

Python可视化库Matplotlib绘图入门详解

作者头像
用户6543014
发布2020-03-26 15:46:43
5.2K0
发布2020-03-26 15:46:43
举报
文章被收录于专栏:CU技术社区CU技术社区

matplotlib是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地行制图。其中,matplotlib的pyplot模块一般是最常用的,可以方便用户快速绘制二维图表。可视化有助于更好地分析数据并增强用户的决策能力。在此matplotlib教程中,我们将绘制一些图形并更改一些属性,例如字体、标签、范围等。

首先,我们将安装matplotlib,然后开始绘制一些基本的图形。在此之前,让我们看一下matplotlib可以绘制的一些图。

Plot Types

matplotlib中有许多不同的Plot Types。本节简要说明了matplotlib中的某些Plot Types。

Line Plot

Line Plot是图形中的简单2D线。

Contouring 和Pseudocolor

通过使用函数pcolormesh(),即使尺寸分布不均匀,我们也可以用颜色表示二维数组。同样,contour()函数执行相同的工作。

直方图

为了以直方图的形式返回bin计数和概率,我们使用了hist()函数。

要在Matplotlib中添加任意路径,我们使用matplotlib.path模块。

流量图

我们可以使用streamplot()函数绘制矢量的流线。我们还可以映射不同参数的颜色和宽度,例如速度、时间等。

条形图

我们可以使用bar()函数制作具有很多自定义功能的条形图。

其他种类Matplotlib中的其他一些绘图示例包括:

  • Ellipses
  • Pie Charts
  • Tables
  • Scatter Plots
  • GUI widgets
  • Filled curves
  • Date handling
  • Log plots
  • Legends
  • TeX- Notations for text objects
  • Native TeX rendering
  • EEG GUI
  • XKCD-style sketch plots

安装

假设在环境变量中设置了Python的路径,则只需使用pip命令安装matplotlib软件包即可上手。

使用以下命令:

代码语言:javascript
复制
$ pip安装matplotlib

在我的系统中,该软件包已经安装。如果该软件包还没安装就会自动下载安装。

要将包导入到您的Python文件中,可以使用以下语句:

代码语言:javascript
复制
导入matplotlib.pyplot作为plt

‍其中matplotlib是库,pyplot是一个软件包,包括所有要在Python中使用MATLAB函数的MATLAB函数。

最后,我们可以使用plt调用python文件中的函数。

垂线

要使用pyplot绘制垂直线,可以使用axvline()函数。

axvline的语法如下:

代码语言:javascript
复制
plt.axvline(x = 0,ymin = 0,ymax = 1,** kwargs)

用这种语法:x是x轴的坐标。这是从垂直方向生成线的位置。ymin是plot的底部,ymax是plot的顶部。** kwarg是线条的属性,例如颜色、标签,线条样式等。

代码语言:javascript
复制
导入matplotlib.pyplot作为plt
plt.axvline(0.2,0,1,label ='pyplot垂直线')
plt.legend()
plt.show()

在此示例中,我们绘制一条垂直线。0.2表示将在图形的点0.2处绘制该线,0和1分别是ymin和ymax,标记行属性之一。legend()是实现绘图的MATLAB函数,可在图上启用标签。最后,show()将打开plot或graph屏幕。

水平线

axhline()绘制一条水平线的语法如下:

代码语言:javascript
复制
plt.axhline(y = 0,xmin = 0,xmax = 1,** kwargs)

在语法中:y是沿y轴的坐标。这些点是水平生成直线的位置。xmin表示图的左侧,xmax是图的右侧。** kwarg是线条的属性,例如颜色、标签、线条样式等。

在上一个示例中,用axhline()替换axvline(), 就会在绘图上得到一条水平线:

代码语言:javascript
复制
导入matplotlib.pyplot作为plt

积分= 0.2

plt.axhline(ypoints,0,1,label ='pyplot水平线')

plt.legend()

plt.show()

多行

要绘制多条垂直线,我们可以创建一个x点/坐标的数组,然后遍历该数组的每个元素以绘制多条线:

代码语言:javascript
复制
导入matplotlib.pyplot作为plt

xpoints = [0.2,0.4,0.6]

对于xpoints中的p:

    plt.axvline(p,label ='pyplot垂直线')

plt.legend()

plt.show()

输出将是:

上面的输出看起来并不吸引人,我们也可以为图中的每行使用不同的颜色。

看下面的示例:

代码语言:javascript
复制
导入matplotlib.pyplot作为plt

xpoints = [0.2,0.4,0.6]

颜色= ['g','c','m']

对于zip中的p,c(xpoints,颜色):

    plt.axvline(p,label ='line:{}'。format(p),c = c)

plt.legend()

plt.show()

在此示例中,我们有一个线数组和一个Python颜色符号数组。使用zip()函数,两个数组合并在一起:xpoints []的第一个元素与color []数组的第一个元素。比如,第一行=绿色,第二行=青色,依此类推。

花括号{}充当占位符,借助format()函数将Python变量添加到输出中。因此,会在图中看到xpoints []。

上面代码的输出:

只需在上一个示例中将axvline()替换为axhline(),绘图中就会出现多条水平线:

代码语言:javascript
复制
导入matplotlib.pyplot作为plt

ypoints = [0.2,0.4,0.6,0.68]

颜色= ['b','k','y','m']

用于zip中的p,c(点,颜色):

    plt.axhline(p,label ='line:{}'。format(p),c = c)

plt.legend()

plt.show()

代码是相同的,这次我们有一个由y轴的四个点组成的数组,并且颜色不同。这两个数组都使用zip()函数合并在一起,遍历最终数组,并且用axhline()绘制线,如下面的输出所示:

保存图形

绘制图形后,如何保存输出图形?

要保存请使用pyplot的savefig()。

代码语言:javascript
复制
plt.savefig(fname,** kwargs)

其中,fname是文件名,目标或路径也可以与文件名一起指定。kwargs参数是可选的。用于更改方向、格式、表面颜色、质量、dpi等。

代码语言:javascript
复制
导入matplotlib.pyplot作为plt

ypoints = [0.2,0.4,0.6,0.68]

颜色= ['b','k','y','m']

用于zip中的p,c(点,颜色):

    plt.axhline(p,label ='line:{}'。format(p),c = c)

plt.savefig('horizontal_lines.png')

plt.legend()

plt.show()

该文件的名称为horizontal_lines.png,该文件保存在您的python文件存储位置:

多个plot

前面的所有示例都是关于在一个图中进行绘制。在同一图中绘制多个图怎么办?

您可以借助Python pyplot的subplot()函数在同一图中生成多个图。

代码语言:javascript
复制
matplotlib.pyplot.subplot(nrows,ncols,index,** kwargs)

在参数中,我们需要指定三个整数,分别是行和列中的绘图数,然后制定图的索引位置。您可以将其视为一个网格,我们正在绘制其单元格。

第一个数字是nrows行数,第二个数字是ncols列数,然后是索引。其他可选参数(** kwargs)包括颜色、标签、标题、快照等。

代码语言:javascript
复制
从matplotlib导入pyplot作为plt

plt.subplot(1、2、1)

x1 = [10,20,30,40,50,60,70,80,90,100]

y1 = [5、10、15、20、25、30、35、40、45、50]

plt.plot(x1,y1,color =“ c”)




plt.subplot(1、2、2)

x2 = [40,50,60,70,80,90,100]

y2 = [40,50,60,70,80,90,100]

plt.plot(x2,y2,color =“ m”)

plt.show()

思考以下代码,以更好地理解如何在一个图中绘制多个图形。首先是定义plot的位置。在第一个子图中,1,2,1表示我们有1行2列,当前图将在索引1处绘制。类似地,1,2,2告诉我们有1行2列,但是这将图的时间定为索引2。

下一步是创建数组以在图中绘制整数点。查看以下输出:

这就是绘制垂直子图的方式。要绘制水平图,请将子图的行和列值更改为:

代码语言:javascript
复制
plt.subplot(2,1,1)

plt.subplot(2,1,2)

这意味着我们有2行1列。输出将如下所示:

现在,让我们创建一个2×2的网格图。

可以使用下面的代码:

代码语言:javascript
复制
从matplotlib导入pyplot作为plt

plt.subplot(2,2,1)

x1 = [40,50,60,70,80,90,100]

y1 = [40,50,60,70,80,90,100]

plt.plot(x1,y1,color =“ c”)




plt.subplot(2,2,2)

x2 = [40,50,60,70,80,90,100]

x2 = [40,50,60,70,80,90,100]

plt.plot(x2,y2,color =“ m”)




plt.subplot(2,2,3)

x3 = [40,50,60,70,80,90,100]

y3 = [40,50,60,70,80,90,100]

plt.plot(x3,y3,color =“ g”)




plt.subplot(2,2,4)

x4 = [40,50,60,70,80,90,100]

y4 = [40,50,60,70,80,90,100]

plt.plot(x4,y4,color =“ r”)

plt.show()

输出将是:

在此示例中,2,2,1表示2行2列,会在索引1处进行绘制。类似地,2,2,2表示2行2列,索引会在2处绘制。

字体大小

我们可以借助一个名为rc()的函数来更改绘图的字体大小。rc()函数用于自定义rc设置。要使用rc()更改字体大小,可以使用以下语法:

代码语言:javascript
复制
matplotlib.pyplot.rc('fontname',** font)

或者

代码语言:javascript
复制
matplotlib.pyplot.rc('font',size = sizeInt

上面语法中的字体是用户定义的词典,用于指定文本的权重、字体系列、字体大小等。

代码语言:javascript
复制
plt.rc('font',size = 30)

这会将字体更改为30,输出将是:

轴范围

可以分别使用pyplot的xlim()和ylim()函数来设置x和y轴的范围或限制。

代码语言:javascript
复制
matplotlib.pyplot.xlim([开始点,结束点])

matplotlib.pyplot.ylim([开始点,结束点])

考虑下面的示例来设置图的x轴限制:

代码语言:javascript
复制
从matplotlib导入pyplot作为plt

x1 = [40,50,60,70,80,90,100]

y1 = [40,50,60,70,80,90,100]

plt.plot(x1,y1)

plt.xlim([0,160])

plt.show()

在此示例中,x轴上的点将从0到160开始,如下所示:

同样,要限制y轴坐标,可以用下面这个代码行:

代码语言:javascript
复制
plt.ylim([0,160])

输出将是:

标签轴

可以使用pyplot的xlabel()和ylabel()函数创建x和y轴的标签。

代码语言:javascript
复制
matplotlib.pyplot.xlabel(labeltext,labelfontdict,** kwargs)

matplotlib.pyplot.ylabel(labeltext,labelfontdict,** kwargs)

在上述语法中,labeltext是标签的文本,是一个字符串,labelfont描述了标签文本的字体大小、粗细、字体类型。

代码语言:javascript
复制
从matplotlib导入pyplot作为plt

x1 = [40,50,60,70,80,90,100]

y1 = [40,50,60,70,80,90,100]

plt.plot(x1,y1)

plt.xlabel('像极客X轴')

plt.ylabel('Like Geeks Y Axis')

plt.show()

在上面的示例中,对于x和y坐标,我们分别有常规的x和y数组。然后plt.xlabel()为x轴生成一个文本,而plt.ylabel()为y轴生成一个文本。

清除plot

pyplot的clf()函数清除了绘图。

代码语言:javascript
复制
matplotlib.pyplot.clf()

在clf()函数中,没有任何参数。

代码语言:javascript
复制
从matplotlib导入pyplot作为plt

x1 = [40,50,60,70,80,90,100]

y1 = [40,50,60,70,80,90,100]

plt.plot(x1,y1)

plt.xlabel('像极客X轴')

plt.ylabel('Like Geeks Y Axis')

plt.clf()

plt.show()

在此代码中,我们创建了一个图并定义了标签。之后,我们使用clf()函数按如下所示清除plot:

希望这个教程对您有用

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SACC开源架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 通过使用函数pcolormesh(),即使尺寸分布不均匀,我们也可以用颜色表示二维数组。同样,contour()函数执行相同的工作。
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档