返回顶部
首页 > 资讯 > 后端开发 > Python >Matplotlib详细教程
  • 515
分享到

Matplotlib详细教程

matplotlibpython开发语言 2023-09-16 07:09:10 515人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录 一、初识Matploblib 1.1 Figure 1.2 Axes 1.3 Axes vs pyplot 1.4 设置画布大小 1.5 设置网格线 1.6 设置坐标轴 1.7 设置刻度和标签 1.8 添加图例和标题 1.9 设置中文

目录

一、初识Matploblib

1.1 Figure

1.2 Axes

1.3 Axes vs pyplot

1.4 设置画布大小

1.5 设置网格线

1.6 设置坐标轴

1.7 设置刻度和标签

1.8 添加图例和标题

1.9 设置中文显示

1.10 设置数学表达式显示

1.11 调整子图布局

1.12 保存图片

二、常见绘图属性

2.1 绘图标记

2.2 Windows字体中英文名称对照

三、基本绘图

3.1 折线图 

3.2 散点图

3.3 双轴图

3.4 条形图 

3.5 直方图

3.6 饼图 

3.7 箱形图 

3.8 泡泡图

3.9 等高线图(轮廓图)


一、初识Matploblib

Matplotlib是python中的绘图库,类似于MATLAB,可以用来绘制各种静态,动态,交互式的图表。

1.1 Figure

 在绘图之前,我们需要一个Figure对象,可以理解成我们需要一张画布才能开始绘图。 

import matplotlib.pyplot as pltfig = plt.figure()

1.2 Axes

拥有Figure对象之后,我们还需要创建绘图区域,添加Axes。在绘制子图过程中,对于每一个子图可能有不同设置,而 Axes 可以直接实现对于单个子图的设定。figure、axes和axis的区别如下图所示。

fig = plt.figure()ax = fig.add_subplot(111)ax.set(xlim=[0.5, 4.5], ylim=[-2, 8], title='An Example Axes',       ylabel='Y-Axis', xlabel='X-Axis')plt.show()

以上的代码,在一幅图上添加了一个Axes,然后设置了这个Axes的X轴以及Y轴的取值范围(这些设置并不是强制的,后面会再谈到关于这些设置),效果如下图:

对于上面的fig.add_subplot(111)就是添加Axes的,参数的解释的在画板的第1行第1列的第一个位置生成一个Axes对象来准备作画。也可以通过fig.add_subplot(2, 2, 1)的方式生成Axes,前面两个参数确定了面板的划分,例如 2, 2会将整个面板划分成 2 * 2 的方格,第三个参数取值范围是 [1, 2*2] 表示第几个Axes。如下面的例子:

fig = plt.figure()ax1 = fig.add_subplot(221)ax2 = fig.add_subplot(222)ax3 = fig.add_subplot(224)

可以发现我们上面添加 Axes 似乎有点弱鸡,所以提供了下面的方式一次性生成所有 Axes:

fig, axes = plt.subplots(nrows=2, ncols=2)axes[0,0].set(title='Upper Left')axes[0,1].set(title='Upper Right')axes[1,0].set(title='Lower Left')axes[1,1].set(title='Lower Right')

fig 还是我们熟悉的画板, axes 成了我们常用二维数组的形式访问,这在循环绘图时,额外好用。

1.3 Axes vs pyplot

下面的代码采用pyplot绘图,很简单易懂,但只适合简单地绘图,可快速地将草图绘出。在处理复杂的绘图工作,特别是有多个子图时,我们最好还是使用 Axes 来完成作画。

plt.plot([1, 2, 3, 4], [10, 20, 25, 30], color='lightblue', linewidth=3)plt.xlim(0.5, 4.5)plt.show()

1.4 设置画布大小

在使用matplotlib作图时,会遇到图片显示不全或者图片大小不是我们想要的,这个时候就需要调整画布大小。下例左图为500*500像素,右图为1000*1000像素。

import matplotlib.pyplot as plt# 500 x 500 像素(先宽度 后高度)# 注意这里的宽度和高度的单位是英寸,1英寸=100像素fig = plt.figure(figsize=(5, 5))ax = fig.add_subplot(111)plt.show()

1.5 设置网格线

通过 axes 对象提供的 grid() 方法可以开启或者关闭画布中的网格以及网格的主/次刻度。除此之外,grid() 函数还可以设置网格的颜色、线型以及线宽等属性。

grid() 的函数使用格式如下:

grid(color='b', ls = '-.', lw = 0.25)

参数含义如下:

  • color:表示网格线的颜色;
  • ls:表示网格线的样式;
  • lw:表示网格线的宽度;

网格在默认状态下是关闭的,通过调用上述函数,网格会被自动开启,如果只是想开启不带任何样式的网格,可以通过 grid(True) 来实现。

实例如下:

import matplotlib.pyplot as pltimport numpy as np# fig画布;axes子图区域fig, axes = plt.subplots(1, 3, figsize=(12, 4))x = np.arange(1, 11)axes[0].plot(x, x ** 3, 'g', lw=2)# 开启网格axes[0].grid(True)axes[0].set_title('default grid')axes[1].plot(x, np.exp(x), 'r')# 设置网格的颜色,线型,线宽axes[1].grid(color='b', ls='-.', lw=0.25)axes[1].set_title('custom grid')axes[2].plot(x, x)axes[2].set_title('no grid')fig.tight_layout()plt.show()

1.6 设置坐标轴

set_xlabel 用字符串列表来设置坐标轴的标签,fontsize 设置轴标签的字体和字号等参数。

import matplotlib.pyplot as pltimport numpy as npfontdict = {'weight': 'nORMal', 'family': 'Times New Roman', 'size': 20}fig, axes = plt.subplots(1, 1)x = np.arange(1, 5)axes.plot(x, np.exp(x))axes.plot(x, x ** 2)# 设置标题axes.set_title("Normal scale", fontdict=fontdict)# 设置x、y轴标签axes.set_xlabel("x axis", fontdict=fontdict)axes.set_ylabel("y axis", fontdict=fontdict)plt.show()

Matplotlib 可以根据自变量与因变量的取值范围,自动设置 x 轴与 y 轴的数值大小。当然,您也可以用自定义的方式,通过 set_xlim() 和 set_ylim() 对 x、y 轴的数值范围进行设置。

import matplotlib.pyplot as pltimport numpy as npfig, a1 = plt.subplots(1, 1)x = np.arange(1, 10)a1.plot(x, np.exp(x), 'r')a1.set_title('exp')# 设置y轴a1.set_ylim(0, 4000)# 设置x轴a1.set_xlim(0, 8)plt.show()

移动坐标轴以及为坐标轴添加箭头可以通过mpl_toolkits.axisartist实现,如下例所示。

import numpy as npimport matplotlib.pyplot as pltimport mpl_toolkits.axisartist as axisartist# 新建一个画板(画图视窗)fig = plt.figure('Sine Wave')# 新建一个绘图区对象ax,并添加到画板中ax = axisartist.Subplot(fig, 1, 1, 1)fig.add_axes(ax)# 隐藏默认坐标轴(上下左右边框)ax.axis[:].set_visible(False)# ax.axis["top"].set_visible(False)# ax.axis["right"].set_visible(False)# 新建可移动的坐标轴X-Yax.axis["x"] = ax.new_floating_axis(0, 0)ax.axis["y"] = ax.new_floating_axis(1, 0)# 设置刻度标识方向ax.axis["x"].set_axis_direction('top')ax.axis["y"].set_axis_direction('left')# 加上坐标轴箭头,设置刻度标识位置ax.axis["x"].set_axisline_style("->", size=2.0)ax.axis["y"].set_axisline_style("->", size=2.0)ax.axis["x"].set_axis_direction('top')ax.axis["y"].set_axis_direction('left')# 画上y=sin(t)折线图,设置刻度范围,设置刻度标识,设置坐标轴位置t = np.linspace(0, 2 * np.pi)y = np.sin(t)ax.plot(t, y, color='red', linewidth=2)plt.title('y = 2sin(2t)', fontsize=14, pad=20)ax.set_xticks(np.linspace(0.25, 1.25, 5) * np.pi)ax.set_yticks([0, 1, 2])# 设置刻度标识显示ax.set_xlim(-0.5 * np.pi, 1.5 * np.pi)ax.set_ylim(-2, 2)plt.show()

 

其中,创建坐标轴的方法有两种:

new_fixed_axis(self, loc, offset=None)和new_floating_axis(self, nth_coord, value, axis_direction=‘bottom’),而new_floating_axis()相对更加灵活。
(1)nth_coord:坐标轴方向,0代表X方向,1代表Y方向
(2)value:坐标轴处于位置,如果是平行与X轴的新坐标轴,则代表Y位置(即通过(0,value)),如果是平行与Y轴的新坐标轴,则代表X位置(即通过(value,0))。
(3)axis_direction:代表刻度标识字的方向,可选[‘top’, ‘bottom’, ‘left’, ‘right’]

1.7 设置刻度和标签

刻度指的是轴上数据点的标记,Matplotlib 能够自动的在 x 、y 轴上绘制出刻度。这一功能的实现得益于 Matplotlib 内置的刻度定位器和格式化器(两个内建类)。在大多数情况下,这两个内建类完全能够满足我们的绘图需求,但是在某些情况下,刻度标签或刻度也需要满足特定的要求,比如将刻度设置为“英文数字形式”或者“大写阿拉伯数字”,此时就需要对它们重新设置。

xticks() 和 yticks() 函数接受一个列表对象作为参数,列表中的元素表示对应数轴上要显示的刻度。如下所示:

ax.set_xticks([2,4,6,8,10])

x 轴上的刻度标记,依次为 2,4,6,8,10。您也可以分别通过 set_xticklabels() 和 set_yticklabels() 函数设置与刻度线相对应的刻度标签。

下面示例介绍了刻度和标签的使用方法,其中对标签逆时针旋转了90°:

import matplotlib.pyplot as pltimport numpy as npimport mathx = np.arange(0, math.pi * 2, 0.05)fig, ax = plt.subplots(1, 1, figsize=(5, 6))y = np.sin(x)ax.plot(x, y)# 设置x轴标签ax.set_xlabel('angle')# ax.set_title('sine')ax.set_xticks([0, 2, 4, 6])# 设置x轴刻度标签,并旋转90°ax.set_xticklabels(['zero', 'two', 'four', 'six'], rotation=90)# 设置y轴刻度ax.set_yticks([-1, 0, 1])plt.show()

1.8 添加图例和标题

图例通过ax.legend或者plt.legend()实现,标题通过ax.set_title()或者plt.title()实现,基本用法如下例所示。

import matplotlib as mplmpl.rcParams["font.sans-serif"] = ["SimHei"]mpl.rcParams["axes.unicode_minus"] = Falseimport matplotlib.pyplot as pltimport numpy as npfig = plt.figure()ax = fig.add_subplot(111)x = np.linspace(-2 * np.pi, 2 * np.pi, 200)y = np.sin(x)y1 = np.cos(x)ax.plot(x, y, label=r"$\sin(x)$")ax.plot(x, y1, label=r"$\cos(x)$")ax.legend(loc="best")ax.set_title("正弦函数和余弦函数的折线图")plt.show()

调整图例

对于图例,我们还可以通过改变legend()的参数来改变图例的显示位置,展示样式(包括图例的外边框、图例中的文本标签的排列位置和图例的投影效果等方面)。

import matplotlib.pyplot as pltimport numpy as npx = np.arange(0, 2.1, 0.1)y = np.power(x, 3)y1 = np.power(x, 2)y2 = np.power(x, 1)plt.plot(x, y, ls="-", lw=2, label="$x^{3}$")plt.plot(x, y1, c="r", ls="-", lw=2, label="$x^{2}$")plt.plot(x, y2, c="y", ls="-", lw=2, label="$x^{1}$")plt.legend(loc="upper left", bbox_to_anchor=(0.05, 0.95),           ncol=3, title="power function", shadow=True,           fancybox=True)plt.show()

 plt.legend()的位置参数loc也可以使用数字,其对应如下:

字符串位置编号位置表述
best0最佳位置
upper right1右上角
upper left2左上角
lower left3右下角
lower right4左下角
right5右侧
center left6左侧垂直居中
center right7右侧垂直居中
lower center8下方水平居中
upper center9上方水平居中
center10正中间

此外还用到了线框位置参数bbox_to_anchor,它的参数值是一个四元元组,且使用Axes坐标系统。也就是说第一个元素代表距离画布左侧的x轴长度的倍速的距离;第二个元素代表距离画布底部的y轴长度的倍数的距离;第三个元素代表元素x轴长度的倍数的线框长度;第四个元素代表y轴长度的倍数的线框宽度。plt.legend(loc = "upper left",bbox_to_anchor=(0.05,0.95),ncol = 3,title = "power function",shadow=True,fancybox=True)会把图例放在上方左手边拐角处的距离坐标轴左边0.1,底部7.6的位置。关键字参数shadow控制线框是否添加阴影;fancybox控制线框是直角还是圆角。 

调整标题

对于标题,也可以通过参数控制各种文本属性。

import matplotlib.pyplot as pltimport numpy as npx = np.linspace(-2, 2, 1000)y = np.exp(x)plt.plot(x, y, ls="-", lw=2, color="g")plt.title("center demo")plt.title("Left Demo", loc="left",          fontdict={"size": "xx-large",                    "color": "r",                    "family": "Times New Roman"})plt.title("Right Demo", loc="right",          size=20, color="c",          style="oblique",          family="Comic Sans MS")plt.show()

上面展示了plt.title()中参数的两种使用方法。其中位置参数loc可以选择“left”,“center”和“right”。family控制的是字体类别,size控制字体大小,color控制字体颜色,style控制字体风格。

1.9 设置中文显示

Matplotlib 默认不支持中文字体,只支持 ASCII 字符,但中文标注更加符合中国人的阅读习惯。

当直接使用中文时,Matplotlib 绘制的图像会出现中文乱码,如左图所示。通过临时重写配置文件的方法,可以解决 Matplotlib 显示中文乱码的问题,代码如下所示:

import matplotlib.pyplot as pltplt.rcParams["font.sans-serif"] = ["SimHei"]  # 设置字体plt.rcParams["axes.unicode_minus"] = False  # 正常显示负号year = [2017, 2018, 2019, 2020]people = [20, 40, 60, 70]# 生成图表plt.plot(year, people)plt.xlabel('年份')plt.ylabel('人口')plt.title('人口增长')# 设置纵坐标刻度plt.yticks([0, 20, 40, 60, 80])# 设置填充选项:参数分别对应横坐标,纵坐标,纵坐标填充起始值,填充颜色plt.fill_between(year, people, 20, color='green')# 显示图表plt.show()

1.10 设置数学表达式显示

Matplotlib中的文本字符串都可以使用 Latex 格式显现出来,具体的使用方法是将文本标记符放在一对美元符号$内,语法格式如下: 

# 绘制表达式 r'$\alpha_i> \beta_i$'import numpy as npimport matplotlib.pyplot as pltt = np.arange(0.0, 2.0, 0.01)s = np.sin(2 * np.pi * t)# 绘制函数图像plt.plot(t, s)# 设置标题plt.title(r'$\alpha_i> \beta_i$', fontsize=20)# 设置数学表达式plt.text(0.6, 0.6, r'$\mathcal{A}\mathrm{sin}(2 \omega t)$', fontsize=20)# 设置数学表达式plt.text(0.1, -0.5, r'$\sqrt{2}$', fontsize=10)plt.xlabel('time (s)')plt.ylabel('volts (mV)')plt.show()

1.11 调整子图布局

在pyplot模块中,与调整子图布局的函数主要为subplots_adjust和tight_layout,其中subplots_adjust是修改子图间距的通用函数,tight_layout默认执行一种固定的间距配置,也可以自定义间距配置,底层原理类似于subplots_adjust函数。

subplots_adjust

subplots_adjust函数的功能为调整子图的布局参数。对于没有设置的参数保持不变,初始值由rcParams["figure.subplot.[name]"]提供。

用法:matplotlib.pyplot.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=None)

参数:

  • left:所有子图整体相对于图像的左外边距,距离单位为图像宽度的比例(小数)。可选参数。浮点数。默认值为0.125。
  • right:所有子图整体相对于图像的右外边距,距离单位为图像宽度的比例(小数)。可选参数。浮点数。默认值为0.0。
  • bottom:所有子图整体相对于图像的下外边距,距离单位为图像高度的比例(小数)。可选参数。浮点数。默认值为0.11。
  • top:所有子图整体相对于图像的上外边距,距离单位为图像高度的比例(小数)。可选参数。浮点数。默认值为0.88。
  • wspace:子图间宽度内边距,距离单位为子图平均宽度的比例(小数)。浮点数。默认值为0.2。
  • hspace:子图间高度内边距,距离单位为子图平均高度的比例(小数)。可选参数。浮点数。默认值为0.2。

示例代码如下:

import matplotlib.pyplot as plt# 原始间距配置fig, ax = plt.subplots(3, 3)print(vars(fig.subplotpars))# 通过subplots_adjust()设置间距配置plt.subplots_adjust(left=0.1, bottom=0.1, right=0.9, top=0.9, wspace=0.5, hspace=0.5)print(vars(fig.subplotpars))plt.show()

原始间距:

修改间距后(wspace=0.5, hspace=0.5): 

tight_layout

pyplot模块中的tight_layout()函数可用于自动调整子图参数或按指定参数填充。通过设置rcParams['figure.autolayout']=True可图像自动应用tight_layout。

用法: matplotlib.pyplot.tight_layout(pad=1.08, h_pad=None, w_pad=None, rect=None)

参数

  • pad:此参数用于在图形边和子图的边之间进行填充,以字体大小的一部分表示。
  • h_pad,w_pad:这些参数用于相邻子图的边之间的填充(高度/宽度),作为字体大小的一部分。
  • rect:此参数是整个子图区域将适合的归一化图形坐标中的矩形。

1.12 保存图片

 使用savefig()函数可将图片保存在指定目录下,在show()前插入,如果在show()后面会出现保存图片为空白现象。

plt.savefig("example.png")

采用下面的方法可以保存去除旁边空白区域和坐标轴的图片,论文绘图时常用。 

pyplot.axis('off') #增加这行关闭坐标轴显示#关键在于bbox_inches = 'tight',pad_inches = 0,去掉空白区域pyplot.savefig(save_dir,bbox_inches = 'tight',pad_inches = 0)

二、常见绘图属性

2.1 绘图标记

绘图过程如果我们想要给坐标自定义一些不一样的标记,就可以使用 plot() 方法的 marker 参数来定义。

以下实例定义了实心圆标记:

import matplotlib.pyplot as pltimport numpy as npypoints = np.array([1, 3, 4, 5, 8, 9, 6, 1, 3, 4, 5, 2, 4])plt.plot(ypoints, marker='o')plt.show()

 marker 可以定义的符号如下:

以下实例定义了 * 标记:

import matplotlib.pyplot as pltimport numpy as npypoints = np.array([1, 3, 4, 5, 8, 9, 6, 1, 3, 4, 5, 2, 4])plt.plot(ypoints, marker='*')plt.show()

fmt 参数

fmt 参数定义了基本格式,如标记、线条样式和颜色。

fmt = '[marker][line][color]'

例如 o:r,o 表示实心圆标记,: 表示虚线,r 表示颜色为红色。

import matplotlib.pyplot as pltimport numpy as npypoints = np.array([6, 2, 13, 10])plt.plot(ypoints, 'o:r')plt.show()

线类型:

线类型标记描述
'-'实线
':'虚线
'--'破折线
'-.'点划线

颜色类型:

颜色标记描述
'r'红色
'g'绿色
'b'蓝色
'c'青色
'm'品红
'y'黄色
'k'黑色
'w'白色

详细颜色对照表 

109fa03e9a1a0ef1d53f8999766ddd56.png

颜色及十六进制对应

cnames = {'aliceblue':            '#F0F8FF','antiquewhite':         '#FAEBD7','aqua':                 '#00FFFF','aquamarine':           '#7FFFD4','Azure':                '#F0FFFF','beige':                '#F5F5DC','bisque':               '#FFE4C4','black':                '#000000','blanchedalmond':       '#FFEBCD','blue':                 '#0000FF','blueviolet':           '#8A2BE2','brown':                '#A52A2A','burlywood':            '#DEB887','cadetblue':            '#5F9EA0','chartreuse':           '#7FFF00','chocolate':            '#D2691E','coral':                '#FF7F50','cornflowerblue':       '#6495ED','cornsilk':             '#FFF8DC','crimson':              '#DC143C','cyan':                 '#00FFFF','darkblue':             '#00008B','darkcyan':             '#008B8B','darkGoldenrod':        '#B8860B','darkgray':             '#A9A9A9','darkgreen':            '#006400','darkkhaki':            '#BDB76B','darkmagenta':          '#8B008B','darkolivegreen':       '#556B2F','darkorange':           '#FF8C00','darkorchid':           '#9932CC','darkred':              '#8B0000','darksalmon':           '#E9967A','darkseagreen':         '#8FBC8F','darkslateblue':        '#483D8B','darkslategray':        '#2F4F4F','darkturquoise':        '#00CED1','darkviolet':           '#9400D3','deeppink':             '#FF1493','deepskyblue':          '#00BFFF','dimgray':              '#696969','dodgerblue':           '#1E90FF','firebrick':            '#B22222','floralwhite':          '#FFFAF0','forestgreen':          '#228B22','fuchsia':              '#FF00FF','gainsboro':            '#DCDCDC','ghostwhite':           '#F8F8FF','gold':                 '#FFD700','goldenrod':            '#DAA520','gray':                 '#808080','green':                '#008000','greenyellow':          '#ADFF2F','honeydew':             '#F0FFF0','hotpink':              '#FF69B4','indianred':            '#CD5C5C','indigo':               '#4B0082','ivory':                '#FFFFF0','khaki':                '#F0E68C','lavender':             '#E6E6FA','lavenderblush':        '#FFF0F5','lawngreen':            '#7CFC00','lemonchiffon':         '#FFFACD','lightblue':            '#ADD8E6','lightcoral':           '#F08080','lightcyan':            '#E0FFFF','lightgoldenrodyellow': '#FAFAD2','lightgreen':           '#90EE90','lightgray':            '#D3D3D3','lightpink':            '#FFB6C1','lightsalmon':          '#FFA07A','lightseagreen':        '#20B2AA','lightskyblue':         '#87CEFA','lightslategray':       '#778899','lightsteelblue':       '#B0C4DE','lightyellow':          '#FFFFE0','lime':                 '#00FF00','limegreen':            '#32CD32','linen':                '#FAF0E6','magenta':              '#FF00FF','maroon':               '#800000','mediumaquamarine':     '#66CDAA','mediumblue':           '#0000CD','mediumorchid':         '#BA55D3','mediumpurple':         '#9370DB','mediumseagreen':       '#3CB371','mediumslateblue':      '#7B68EE','mediumspringgreen':    '#00FA9A','mediumturquoise':      '#48D1CC','mediumvioletred':      '#C71585','midnightblue':         '#191970','mintcream':            '#F5FFFA','mistyrose':            '#FFE4E1','moccasin':             '#FFE4B5','navajowhite':          '#FFDEAD','navy':                 '#000080','oldlace':              '#FDF5E6','olive':                '#808000','olivedrab':            '#6B8E23','orange':               '#FFA500','orangered':            '#FF4500','orchid':               '#DA70D6','palegoldenrod':        '#EEE8AA','palegreen':            '#98FB98','paleturquoise':        '#AFEEEE','palevioletred':        '#DB7093','papayawhip':           '#FFEFD5','peachpuff':            '#FFDAB9','peru':                 '#CD853F','pink':                 '#FFC0CB','plum':                 '#DDA0DD','powderblue':           '#B0E0E6','purple':               '#800080','red':                  '#FF0000','rosybrown':            '#BC8F8F','royalblue':            '#4169E1','saddlebrown':          '#8B4513','salmon':               '#FA8072','sandybrown':           '#FAA460','seagreen':             '#2E8B57','seashell':             '#FFF5EE','sienna':               '#A0522D','silver':               '#C0C0C0','skyblue':              '#87CEEB','slateblue':            '#6A5ACD','slategray':            '#708090','snow':                 '#FFFAFA','springgreen':          '#00FF7F','steelblue':            '#4682B4','tan':                  '#D2B48C','teal':                 '#008080','thistle':              '#D8BFD8','tomato':               '#FF6347','turquoise':            '#40E0D0','violet':               '#EE82EE','wheat':                '#F5DEB3','white':                '#FFFFFF','whitesmoke':           '#F5F5F5','yellow':               '#FFFF00','yellowgreen':          '#9ACD32'}

标记大小与颜色

我们可以自定义标记的大小与颜色,使用的参数分别是:

  • markersize,简写为 ms:定义标记的大小。
  • markerfacecolor,简写为 mfc:定义标记内部的颜色。
  • markeredgecolor,简写为 mec:定义标记边框的颜色。

设置标记大小:

import matplotlib.pyplot as pltimport numpy as npypoints = np.array([6, 2, 13, 10])plt.plot(ypoints, marker='o', ms=20)plt.show()

 设置标记外边框颜色:

import matplotlib.pyplot as pltimport numpy as npypoints = np.array([6, 2, 13, 10])plt.plot(ypoints, marker='o', ms=20, mec='r')plt.show()

 设置标记内部颜色:

import matplotlib.pyplot as pltimport numpy as npypoints = np.array([6, 2, 13, 10])plt.plot(ypoints, marker='o', ms=20, mfc='r')plt.show()

 自定义标记内部与边框的颜色:

import matplotlib.pyplot as pltimport numpy as npypoints = np.array([6, 2, 13, 10])plt.plot(ypoints, marker='o', ms=20, mec='r', mfc='y')plt.show()

2.2 windows字体中英文名称对照

中文名称

英文名称

黑体

SimHei

微软雅黑

Microsoft YaHei

微软雅黑

Microsoft YaHei

新宋体

NSimSun

新细明体

PMingLiU

细明体

MingLiU

标楷体

DFKai-SB

仿宋

FangSong

楷体

KaiTi

仿宋_GB2312

FangSong_GB2312

楷体_GB2312

KaiTi_GB2312

三、基本绘图

3.1 折线图 

plot()函数画出一系列的点,并且用线将它们连接起来。看下例子:

x = np.linspace(0, np.pi)y_sin = np.sin(x)y_cos = np.cos(x)ax1.plot(x, y_sin)ax2.plot(x, y_sin, 'go--', linewidth=2, markersize=12)ax3.plot(x, y_cos, color='red', marker='+', linestyle='dashed')

在上面的三个Axes上作画。plot,前面两个参数为x轴、y轴数据。ax2的第三个参数是 MATLAB风格的绘图,对应ax3上的颜色,marker,线型。

 另外,我们可以通过关键字参数的方式绘图,如下例:

x = np.linspace(0, 10, 200)data_obj = {'x': x,            'y1': 2 * x + 1,            'y2': 3 * x + 1.2,            'mean': 0.5 * x * np.cos(2*x) + 2.5 * x + 1.1}fig, ax = plt.subplots()#填充两条线之间的颜色ax.fill_between('x', 'y1', 'y2', color='yellow', data=data_obj)# Plot the "centerline" with `plot`ax.plot('x', 'mean', color='black', data=data_obj)plt.show()

发现上面的作图,在数据部分只传入了字符串,这些字符串对一个这 data_obj 中的关键字,当以这种方式作画时,将会在传入给 data 中寻找对应关键字的数据来绘图。 

3.2 散点图

只画点,不用线连接起来。

import matplotlib.pyplot as pltimport numpy as npx = np.arange(10)y = np.random.randn(10)plt.scatter(x, y, color='red', marker='+')plt.show()

3.3 双轴图

在一些应用场景中,有时需要绘制两个 x 轴或两个 y 轴,这样可以更直观地显现图像,从而获取更有效的数据。Matplotlib 提供的 twinx() 和 twiny() 函数,除了可以实现绘制双轴的功能外,还可以使用不同的单位来绘制曲线,比如一个轴绘制对函数,另外一个轴绘制指数函数。 

下面示例绘制了一个具有两个 y 轴的图形,一个显示正弦函数 sin(x),另一个显示对数函数 log(x)。

import matplotlib.pyplot as pltimport numpy as np# 准备数据t = np.arange(0.01, 10.0, 0.01)data1 = np.exp(t)data2 = np.sin(2 * np.pi * t)# 设置主轴fig, ax1 = plt.subplots()color = 'tab:red'ax1.set_xlabel('time (s)')ax1.set_ylabel('exp', color=color)ax1.plot(t, data1, color=color)ax1.tick_params(axis='y', labelcolor=color)# 设置次轴ax2 = ax1.twinx()color = 'tab:blue'ax2.set_ylabel('sin', color=color)ax2.plot(t, data2, color=color)ax2.tick_params(axis='y', labelcolor=color)fig.tight_layout()plt.show()

3.4 条形图 

 条形图分两种,一种是水平的,一种是垂直的,见下例子:

import matplotlib.pyplot as pltimport numpy as npnp.random.seed(1)x = np.arange(5)y = np.random.randn(5)fig, axes = plt.subplots(ncols=2, figsize=plt.figaspect(1./2))vert_bars = axes[0].bar(x, y, color='lightblue', align='center')horiz_bars = axes[1].barh(x, y, color='lightblue', align='center')#在水平或者垂直方向上画线axes[0].axhline(0, color='gray', linewidth=2)axes[1].axvline(0, color='gray', linewidth=2)plt.show()

条形图还返回了一个Artists 数组,对应着每个条形,例如上图 Artists 数组的大小为5,我们可以通过这些 Artists 对条形图的样式进行更改,如下例: 

fig, ax = plt.subplots()vert_bars = ax.bar(x, y, color='lightblue', align='center')# We could have also done this with two separate calls to `ax.bar` and numpy boolean indexing.for bar, height in zip(vert_bars, y):    if height < 0:        bar.set(edgecolor='darkred', color='salmon', linewidth=3)plt.show()

3.5 直方图

 直方图用于统计数据出现的次数或者频率,有多种参数可以调整,见下例:

import matplotlib.pyplot as pltimport numpy as npnp.random.seed(19680801)n_bins = 10x = np.random.randn(1000, 3)fig, axes = plt.subplots(nrows=2, ncols=2)ax0, ax1, ax2, ax3 = axes.flatten()colors = ['red', 'tan', 'lime']ax0.hist(x, n_bins, density=True, histtype='bar', color=colors, label=colors)ax0.legend(prop={'size': 10})ax0.set_title('bars with legend')ax1.hist(x, n_bins, density=True, histtype='barstacked')ax1.set_title('stacked bar')ax2.hist(x,  histtype='barstacked', rwidth=0.9)ax3.hist(x[:, 0], rwidth=0.9)ax3.set_title('different sample sizes')fig.tight_layout()plt.show()

参数中density控制Y轴是概率还是数量,与返回的第一个的变量对应。histtype控制着直方图的样式,默认是 ‘bar’,对于多个条形时就相邻的方式呈现如子图1, ‘barstacked’ 就是叠在一起,如子图2、3。 rwidth 控制着宽度,这样可以空出一些间隙,比较图2、3. 图4是只有一条数据时。

3.6 饼图 

import matplotlib.pyplot as pltlabels = 'Frogs', 'Hogs', 'Dogs', 'Logs'sizes = [15, 30, 45, 10]explode = (0, 0.1, 0, 0)  # only "explode" the 2nd slice (i.e. 'Hogs')fig1, (ax1, ax2) = plt.subplots(2)ax1.pie(sizes, labels=labels, autopct='%1.1f%%', shadow=True)ax1.axis('equal')ax2.pie(sizes, autopct='%1.2f%%', shadow=True, startangle=90, explode=explode,    pctdistance=1.12)ax2.axis('equal')ax2.legend(labels=labels, loc='upper right')plt.show()

3.7 箱形图 

箱型图(也称为盒须图)于 1977 年由美国著名统计学家约翰·图基(John Tukey)发明。它能显示出一组数据的最大值、最小值、中位数、及上下四分位数。

在箱型图中,我们从上四分位数到下四分位数绘制一个盒子,然后用一条垂直触须(形象地称为“盒须”)穿过盒子的中间。上垂线延伸至上边缘(最大值),下垂线延伸至下边缘(最小值)。箱型图结构如下所示:

首先准备创建箱型图所需数据:可以使用numpy.random.normal()函数来创建一组基于正态分布的随机数据,该函数有三个参数,分别是正态分布的平均值、标准差以及期望值的数量然后用 data_to_plot 变量指定创建箱型图所需的数据序列,最后用 boxplot() 函数绘制箱型图。

import matplotlib.pyplot as pltimport numpy as np# 利用随机数种子使每次生成的随机数相同np.random.seed(10)collectn_1 = np.random.normal(100, 10, 200)collectn_2 = np.random.normal(80, 30, 200)collectn_3 = np.random.normal(90, 20, 200)collectn_4 = np.random.normal(70, 25, 200)data_to_plot = [collectn_1, collectn_2, collectn_3, collectn_4]fig = plt.figure()# 创建绘图区域ax = fig.add_subplot(111)# 创建箱型图bp = ax.boxplot(data_to_plot)plt.show()

3.8 泡泡图

散点图的一种,加入了第三个值 s 可以理解成普通散点,画的是二维,泡泡图体现了Z的大小,如下例:

import matplotlib.pyplot as pltimport numpy as npnp.random.seed(19680801)N = 50x = np.random.rand(N)y = np.random.rand(N)colors = np.random.rand(N)area = (30 * np.random.rand(N))**2  # 0 to 15 point radiiplt.scatter(x, y, s=area, c=colors, alpha=0.5)plt.show()

3.9 等高线图(轮廓图)

等高线图(也称“水平图”)是一种在二维平面上显示 3D 图像的方法。等高线有时也被称为 “Z 切片”,如果您想要查看因变量 Z 与自变量 X、Y 之间的函数图像变化(即 Z=f(X,Y)),那么采用等高线图最为直观。

import numpy as npimport matplotlib.pyplot as plt"""np.linspace()在指定的大间隔内[-4.0,4.0],返回固定间隔100个数据"""x = np.linspace(-4.0, 4.0, 100)y = np.linspace(-4.0, 4.0, 100)"""np.meshgrid()两个坐标轴上的点在平面上画格,产生一个以向量x为行,向量y为列的矩"""X, Y = np.meshgrid(x, y)# 定义Z与X,Y之间的关系,即原方程x²+y²=r²Z = np.sqrt(X ** 2 + Y ** 2)fig, axes = plt.subplots(1, 2, figsize=(16, 9))axes[0].contour(X, Y, Z, alpha=0.75, cmap=plt.cm.hot)cp = axes[1].contourf(X, Y, Z, cmap=plt.cm.hot)fig.colorbar(cp)plt.show()

来源地址:https://blog.csdn.net/weixin_42620109/article/details/126466337

--结束END--

本文标题: Matplotlib详细教程

本文链接: https://lsjlt.com/news/409521.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Matplotlib详细教程
    目录 一、初识Matploblib 1.1 Figure 1.2 Axes 1.3 Axes vs pyplot 1.4 设置画布大小 1.5 设置网格线 1.6 设置坐标轴 1.7 设置刻度和标签 1.8 添加图例和标题 1.9 设置中文...
    99+
    2023-09-16
    matplotlib python 开发语言
  • Python Matplotlib绘图基础详细教程
    目录1. 画图的基本步骤1.1一步一步看2.散点图3.条形图的绘制4.四幅子图的绘制5.饼状图的绘制6.热力图的绘制总结plt是最常用的接口 1. 画图的基本步骤 1.导入模块 import matplotlib as ...
    99+
    2022-07-01
    python 绘图库Matplotlib matplotlib绘图代码 python matplotlib画图
  • 机器学习 | matplotlib超详细教程
    欢迎关注博主 Mindtechnist 或加入【Linux C/C++/Python社区】一起学习和分享Linux、C、C++、Python、Matlab,机器人运动控制、多机器人协作,智能优化...
    99+
    2023-08-31
    机器学习 matplotlib python 数据可视化 人工智能 原力计划
  • Python matplotlib seaborn绘图教程详解
    目录一、seaborn概述二、数据整理01 折线图02 柱形图03 直方图三、绘图01 设定调色盘02 柱状图03 技术图04 点图05 箱型图06 小提琴图一、seaborn概述 ...
    99+
    2024-04-02
  • matplotlib pyplot 教程
    Last updated: 2022-09-23, 13:55 简介 matplotlib.pyplot 包含一系列类似 MATLAB 的绘图函数。每个 pyplot 函数对 figure 进行一些...
    99+
    2023-09-01
    matplotlib python 开发语言
  • Burpsuite详细教程
    Burpsuite是一种功能强大的Web应用程序安全测试工具。它提供了许多有用的功能和工具,可以帮助用户分析和评估Web应用程序的安全性。在本教程中,我们将介绍如何安装、配置和使用Burpsuite,...
    99+
    2023-10-05
    服务器 运维
  • mysql详细教程
    目录 1、初识数据库 1.1、什么是数据库 1.2、数据库分类 1.3、相关概念 1.4、MySQL及其安装 1.5、基本命令 2、操作数据库 2.1、操作数据库 2.2、数据库的列类型 2.3、数据库的字段属性 2.4、创建数据库表 2...
    99+
    2023-09-09
    数据库 mysql sql
  • upload-labs详细教程
    目录  第一关 js检查  第二关 Content-Type  第三关 黑名单验证  第四关 黑名单验证(.htaccess绕过)   第五关 黑名单验证(.user.ini)  第六关 空格绕过  第七关 点绕过   第八关 ::$DAT...
    99+
    2023-09-27
    php 开发语言 后端 web安全 安全
  • MyBatis Plus详细教程
    目录 一、什么是MybatisPlus 二、快速入门 2.1、创建数据库mybatis_plus 2.2、创建user表 2.3、插入数据 2.4、初始化项目 2.5、添加依赖 2.6、配置(连接数据库) 2.7、编码 2.8、开始使用 2...
    99+
    2023-08-30
    java mysql intellij-idea spring
  • Reacthook超详细教程
    目录什么是hookuseStateuseEffectuseRefuseCallbackuseMemouseContextuseReducer什么是hook React Hook是Re...
    99+
    2022-11-13
    React hook React hook函数
  • Python Matplotlib库绘制曲线图 最快入门教程(最详细最简单)
    文章目录 1.导入Matplotlib库2.最常用的绘图函数plot3.展示绘制完成的图像4.保存绘制的图像5.分割子绘图区域6.设置横纵轴的坐标轴名称7.设置图像名称8.让图像中可以出现中文...
    99+
    2023-09-25
    python
  • 超详细彻底卸载Anaconda详细教程
    一、在开始处打开Anaconda Prompt 二、打开后,输入conda install tqdm -f命令并按回车键 conda install tqdm -f 三、之后页面会出现一个WA...
    99+
    2023-09-02
    python
  • oracle19c卸载教程的超详细教程
    1.关闭所有服务,右键【我的电脑】--》【管理】--》【服务和应用程序】--》【服务】,或是win+r输入services.msc,找到oracle所有服务然后停止  2.使用Universal insta...
    99+
    2023-01-16
    oracle 19c卸载 oracle卸载教程 oracle19c教程
  • SQLyog12.08安装详细教程
    SQLyog安装教程 一、软件下载 为了更好的学习,我们需要可视化界面,而不仅仅是通过命令行黑窗口管理数据库。SQLyog 就是一个快速而简洁的图形化管理MYSQL数据库的工具。 SQLyog12.08下载地址: 链接:htt...
    99+
    2019-01-24
    SQLyog12.08安装详细教程
  • SQLyog12.08详细安装教程
    SQLyog安装教程 一、软件下载 为了更好的学习,我们需要可视化界面,而不仅仅是通过命令行黑窗口管理数据库。SQLyog 就是一个快速而简洁的图形化管理MYSQL数据库的工具。 SQLyog12.08下载地址: 链接:htt...
    99+
    2019-04-28
    SQLyog12.08详细安装教程
  • DVWA详细安装教程
    1、下载和安装phpstudy 小皮面板(phpstudy) - 让天下没有难配的服务器环境! (xp.cn)  下载和安装很简单的,但是要注意安装的文件夹不得有中文否则要报错。 安装后开启Apache和MySQL两个服务,  2、...
    99+
    2023-09-26
    php web安全
  • MySQL安装详细教程
    目录 一、下载链接 二、配置MySQL 2.1配置环境变量(可以让任意盘符号都能访问bin目录) 2.2新建配置文件 2.3初始化MySQL 2.4注册MySQL服务 2.5启动MySQL服务 2.6修改默认密码 ​ 三、登录MySQL ...
    99+
    2023-09-28
    mysql 数据库 database
  • clickhouse安装详细教程
    1.前置准备 首先我们准备一台有linux系统的服务器 然后更改文件的所属者,这点很重要 下载解压jdk, 配置环境变量 接下来进入正题: 安装clickhouse 确定防火墙处于关闭状态 ...
    99+
    2023-09-03
    clickhouse linux 服务器 java 大数据
  • Maven详细安装教程
    简介         Apache Maven是一个(特别是Java编程)项目管理及自动构建工具,由Apache软件基金会所提供。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。 ...
    99+
    2023-09-01
    maven apache java intellij idea
  • MySQL卸载教程(详细)
    系列文章 MySQL安装教程(详细) 本文链接:https://blog.csdn.net/youcheng_ge/article/details/126037520 文章目录 系列文章前言...
    99+
    2023-09-02
    数据库 卸载 mysql
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作