详细阐述matplotlib.pyplot中plot模块的相关用法和参数以及一些画图基础用法(解决图例不完全显示、中文不显示问题等。)

news2024/10/1 5:22:26

本文章类似于一篇学习笔记,matplotlib.pyplot是一个很实用的图像绘图模块,下面主要针对plot()绘图函数进行系统性的阐述。

目录

关于figure() 

figure() 的基本使用

plt.figure() 常用参数

figsize 和 dpi

facecolor 和 edgecolor

图形的编号和重用

tight_layout 和 constrained_layout

add_subplot()和subplot()

add_subplot()

subplot()

subplot() 和 add_subplot() 的区别

tight_layout 

 constrained_layout

保存图形 

关于plot

plot() 函数基础用法 

plot() 中的基本参数 

 color:设置线的颜色

 相关使用

 单字母缩写

RGB 十六进制颜色 

RGB 和 RGBA 颜色元组 

 matplotlib 的内置调色盘

 linestyle:设置线型

linewidth:设置线宽 

marker:标记数据点 

相关参数详细介绍

 marker 示例

 标记的进一步定制

组合使用标记参数 

仅绘制标记而无连线

组合使用参数 

处理多条曲线

xlable和ylabel

xlabel() 和 ylabel() 的基本用法

xlabel() 和 ylabel() 的常用参数 

 参数详解及示例 

 fontsize 参数

fontdict 参数 

color 参数 

loc 参数 

自定义轴标签的高级示例 

结合 LaTeX 语法 

其他常用参数 

label:用于图例

默认图例显示 

控制图例的位置

bbox_to_anchor 参数:自定义图例的位置

ncol 参数:控制图例的列数

fontsize 参数:控制图例字体大小 

其他图例定制参数 

 关于图例部份没有显示完全解决方法

alpha:透明度

高级用法

设置坐标轴范围 

设置坐标轴标签和图标题 

 解决问题:显示中文。

1. 使用支持中文的字体

方法 1:全局设置字体

方法 2:为单个图设置字体

2. 确认系统中可用的字体

3. 在不同操作系统上的字体设置

Windows 示例

macOS 示例 

Linux 示例

4. 安装字体(如 SimHei)

示例:手动加载字体

5. 使用 matplotlib 的 rc 参数

fontsize 调整字体大小

关于figure() 

plt.figure() 来创建一个图形(Figure)对象。也就是我们常说的幕布、画板,而在这之上,我们可以添加一个或多个子图,然后进行绘图操作。figure() 函数可以帮助控制整个图形窗口的大小、分辨率、背景色等。

figure() 的基本使用

plt.figure() 创建一个空白的图形窗口,之后可以通过添加子图来进行绘图。

代码:

import matplotlib.pyplot as plt

# 创建一个空白图形
fig = plt.figure()

# 展示图形
plt.show()

上述代码创建了一个空白的图形窗口,目前没有绘制任何内容,所以没有图像显示,但你已经创建了一个 Figure 对象。

plt.figure() 常用参数

下面时常见的参数:

 下面将对这些参数和一些注意事项进行详细的阐述。

figsizedpi

 figsize 决定了图形的尺寸,而 dpi 决定了图形的分辨率。figsize 是以英寸为单位的,dpi 则是每英寸多少个像素点(点每英寸)。

# 创建一个宽8英寸、高6英寸的图形,分辨率为120 DPI
fig = plt.figure(figsize=(8, 6), dpi=120)

# 添加一个子图并绘制内容
ax = fig.add_subplot(111)
ax.plot([1, 2, 3], [4, 5, 6])

plt.show()

 结果:

我们创建了一个 8 x 6 英寸的图形,分辨率dpi为 120 DPI。

这边dpi建议默认(默认100)的就行,因为太高的话会影响运行速率比如: 1080

facecoloredgecolor

可以用 facecolor 来设置图形的背景颜色,edgecolor 来设置图形的边框颜色。 

代码:

# 设置图形背景颜色为 'lightgray',边框颜色为 'blue'
fig = plt.figure(facecolor='lightgray', edgecolor='blue')

ax = fig.add_subplot(111)
ax.plot([1, 2, 3], [4, 5, 6])

plt.show()

 结果:

 至于详细的,比如更换那些颜色,怎么更换,大家可以手动查一下就可以了。

图形的编号和重用

  • num 参数可以用来指定图形的编号或名称。
  • 如果 num 是整数,则指定图形的编号;如果是字符串,则指定图形的名称。
  • 如果创建一个已有编号或名称的图形,matplotlib 会自动切换到该图形。

示例代码:

# 创建图形编号为1的图
fig1 = plt.figure(num=1)
plt.plot([1, 2, 3], [4, 5, 6])
plt.title('Figure 1')

# 切换到图形编号2,并创建新图形
fig2 = plt.figure(num=2)
plt.plot([3, 2, 1], [6, 5, 4])
plt.title('Figure 2')

# 再次切换回图形1
plt.figure(num=1)
plt.plot([1, 3, 2], [4, 6, 5])
plt.title('Updated Figure 1')

plt.show()

 结果:

在这个例子中,创建了两个图形,并在图形间来回切换。plt.figure() 函数可以用于切换到已有的图形。 这个一般我们用不到,相当于给figure创建的画布或者说幕布,就是后面的白板,咱们就一直叫白板吧,当你给白板加入编号的时候,要知道这些白板都具有属性的。所以当你使用之前白板的编号时相当于直接把对应编号的白板拿过来用了。(ps:我是这么理解的,可能有问题,欢迎指正。)

tight_layoutconstrained_layout

这两个参数就涉及到多图像显示的问题了。

我们用来作为最后背景的白板上的其他小型白板就是所谓的子图。

  • tight_layout 用于自动调整子图布局,防止标签或轴标题重叠。
  • constrained_layoutmatplotlib 更高级的布局调整工具,它比 tight_layout 更加智能。(constrained_layout=True 自动调整了子图的布局,避免了标题、轴标签和子图之间的重叠。)

 其实现在的话一般就是使用constrained_layout=True 。

那么如何使用他们,首先我们要知道的时如何添加子图。add_subplot()和subplot()可以实现这一功能。

这两个功能一样,使用起来略有区别,首先add_subplot属于Figure模块,subplot并不是。:

add_subplot()和subplot()

add_subplot()

先看示例:

fig = plt.figure(figsize=(6, 6))

# 创建 2x2 网格中的第一个子图
ax1 = fig.add_subplot(221)
ax1.plot([1, 2, 3], [4, 5, 6])
ax1.set_title('Subplot 1')

# 创建 2x2 网格中的第二个子图
ax2 = fig.add_subplot(222)
ax2.plot([1, 2, 3], [6, 5, 4])
ax2.set_title('Subplot 2')

# 创建 2x2 网格中的第三个子图
ax3 = fig.add_subplot(223)
ax3.plot([1, 2, 3], [7, 8, 9])
ax3.set_title('Subplot 3')

# 创建 2x2 网格中的第四个子图
ax4 = fig.add_subplot(224)
ax4.plot([1, 2, 3], [9, 8, 7])
ax4.set_title('Subplot 4')

plt.show()

或者:

fig = plt.figure(figsize=(6, 6))

# 创建 2x2 网格中的第一个子图
ax1 = fig.add_subplot(2,2,1)
ax1.plot([1, 2, 3], [4, 5, 6])
ax1.set_title('Subplot 1')

# 创建 2x2 网格中的第二个子图
ax2 = fig.add_subplot(2,2,2)
ax2.plot([1, 2, 3], [6, 5, 4])
ax2.set_title('Subplot 2')

# 创建 2x2 网格中的第三个子图
ax3 = fig.add_subplot(2,2,3)
ax3.plot([1, 2, 3], [7, 8, 9])
ax3.set_title('Subplot 3')

# 创建 2x2 网格中的第四个子图
ax4 = fig.add_subplot(224)
ax4.plot([1, 2, 3], [9, 8, 7])
ax4.set_title('Subplot 4')

 结果

add_subplot()figure 对象的方法,用来在 figure 上添加子图,返回一个 Axes 对象。它可以接受三种形式的参数。

fig.add_subplot(nrows, ncols, index, **kwargs)
  • nrows:表示子图布局的行数。
  • ncols:表示子图布局的列数。
  • index:表示要创建的子图的位置,从左到右,从上到下,子图索引从 1 开始。

相关参数详解:

  • projection:指定投影类型,可以是 'rectilinear'(默认)、'polar'(极坐标)等。
  • polar:设置为 True 时,子图为极坐标图。
  • sharex/sharey:指定共享 x 或 y 轴。
  • label:指定子图的标签。
  • box_aspect:设置子图的宽高比。
import matplotlib.pyplot as plt

fig = plt.figure()

# 添加一个2行2列的子图,子图位置是第1个
ax1 = fig.add_subplot(2, 2, 1)
ax1.plot([1, 2, 3])

# 添加一个2行2列的子图,子图位置是第2个
ax2 = fig.add_subplot(2, 2, 2)
ax2.plot([3, 2, 1])

# 添加一个2行2列的子图,子图位置是第3个
ax3 = fig.add_subplot(2, 2, 3)
ax3.plot([1, 3, 2])

plt.show()

 结果:

add_subplot() 也支持 3 位数的简写形式 

fig.add_subplot(221)  # 相当于 fig.add_subplot(2, 2, 1)

 其中 221 表示:2 行、2 列、子图索引为 1。

使用tight_layout和constrained_layout就是可以合理的调整这些子图让他们自动的以一种合适的方式进行排列

subplot()

subplot()matplotlib.pyplot 中的函数,用来创建子图。它与 add_subplot() 类似,区别在于它可以更简洁地在当前 figure 中创建子图。

plt.subplot(nrows, ncols, index, **kwargs)

add_subplot() 的参数相同:

  • nrows:子图行数。
  • ncols:子图列数。
  • index:子图的位置索引,从 1 开始。

示例:

import matplotlib.pyplot as plt

# 创建一个2行2列的子图布局,选择第1个子图
plt.subplot(2, 2, 1)
plt.plot([1, 2, 3])

# 选择第2个子图
plt.subplot(2, 2, 2)
plt.plot([3, 2, 1])

# 选择第3个子图
plt.subplot(2, 2, 3)
plt.plot([1, 3, 2])

plt.show()

 结果:

简写形式

add_subplot() 一样,subplot() 也支持简写形式:

plt.subplot(221)  # 相当于 plt.subplot(2, 2, 1)
subplot()add_subplot() 的区别
  • 调用方式不同add_subplot()figure 对象的方法,而 subplot()matplotlib.pyplot 的全局方法。subplot() 直接在当前 figure 中创建子图。
  • 功能基本一致:它们都可以用来添加子图,支持同样的参数和功能。

其他的就不多说了。 

tight_layout 

 示例:

fig = plt.figure(figsize=(8, 6))

ax1 = fig.add_subplot(211)
ax1.plot([1, 2, 3], [4, 5, 6])
ax1.set_title('Subplot 1')

ax2 = fig.add_subplot(212)
ax2.plot([1, 2, 3], [4, 5, 6])
ax2.set_title('Subplot 2')

# 自动调整布局,防止标题和轴标签重叠
plt.tight_layout()
plt.show()

如果没有使用 tight_layout(),是如下的效果:

这个例子可能看不出来什么,当你选择一下子显示十多张甚至几十张图片的时候,这种处理子图的方法可以明显的让图像更美观。

另外,使用该方法可能会出现以下爆红:

UserWarning: The figure layout has changed to tight......
这个是警告不是错误,而是一个通知,告诉你Matplotlib已经根据你的图表内容调整了布局。

 constrained_layout

 这个跟上一个处理方法的功能一样,只是更智能一点,这两个用哪个都可以。

示例代码:

fig = plt.figure(figsize=(8, 6), constrained_layout=True)

ax1 = fig.add_subplot(211)
ax1.plot([1, 2, 3], [4, 5, 6])
ax1.set_title('Subplot 1')

ax2 = fig.add_subplot(212)
ax2.plot([1, 2, 3], [4, 5, 6])
ax2.set_title('Subplot 2')

plt.show()

结果:

保存图形 

 savefig() 方法将图形保存到文件中。

代码:

fig = plt.figure(figsize=(6, 4))

plt.plot([1, 2, 3], [4, 5, 6])

# 保存图形为 PNG 文件
plt.savefig('figure.png', dpi=300, bbox_inches='tight')

注意,这东西是保存的我们显示的东西,什么意思呢,就是指白板上显示什么它保存什么。可以尝试一下,你会发现,它并不适合单纯的保存图片。

关于plot

plot() 函数是用于绘制2D图形的主要函数,它可以绘制线图、散点图、带有误差条的图等。 

plot() 函数基础用法 

示例:生成一条从 x=0 到 x=10 的正弦曲线。plot(x, y) 函数的基本形式中,x 是横坐标数据,y 是纵坐标数据。

import matplotlib.pyplot as plt
import numpy as np

# 示例数据
x = np.linspace(0, 10, 100)
y = np.sin(x)

# 绘图
plt.plot(x, y)
plt.show()

plot() 中的基本参数 

前两个一个参数一个对应x轴的数,一个对应 y轴的数,这两个参数属于基础用法,不多做赘述。

 color:设置线的颜色

你可以通过 color 参数指定线的颜色。常见的颜色格式有颜色缩写(例如 'r' 代表红色)或颜色名(例如 'red')。 

plt.plot(x, y, color='red')  # 使用名称
plt.plot(x, y, color='g')    # 使用缩写
 相关使用

 单字母缩写

RGB 十六进制颜色 

你可以使用 #RRGGBB 格式的十六进制字符串来指定颜色。例如:

  • '#ff0000':红色
  • '#00ff00':绿色
  • '#0000ff':蓝色
RGB 和 RGBA 颜色元组 

可以使用一个元组 (R, G, B) 或者 (R, G, B, A) 来指定颜色,其中 R、G、B 是[0, 1] 范围内的浮点数,代表红色、绿色、蓝色的成分,A 是可选的透明度(alpha)。

例如:

plt.plot(x, y1, color=(0.1, 0.2, 0.5), label='RGB 颜色')
plt.plot(x, y2, color=(0.1, 0.2, 0.5, 0.5), label='RGBA 颜色(带透明度)')
 matplotlib 的内置调色盘

matplotlib 还提供了多种预定义的调色盘,例如:

  • 'C0''C9':代表内置颜色循环中的10种颜色(默认颜色循环)
  • 使用 CSS4 的颜色名:matplotlib 支持超过140种颜色名,你可以直接使用 CSS4 标准中的颜色名,例如 'salmon''gold' 等。
plt.plot(x, y1, color='salmon', label='Salmon 颜色')

示例:使用不同的颜色和线型 

plt.plot(x, y1, color='r', linestyle='--', label='红色虚线')
plt.plot(x, y2, color='#1f77b4', linestyle='-.', label='自定义颜色和点划线')

plt.legend()
plt.show()

 linestyle:设置线型

可以通过 linestyle 参数控制线条的样式。常见的值包括:

  • '-':实线(默认)
  • '--':虚线
  • ':':点线
  • '-.':点划线
plt.plot(x, y, linestyle='--')

示例: 

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)

# 绘制不同线型
plt.plot(x, y1, linestyle='-', label='实线')
plt.plot(x, y2, linestyle='--', label='虚线')

plt.legend()
plt.show()

 

其中的方块是中文没有显示,这个后面再说。 

 此外,你还可以定义自定义的线型模式。matplotlib 支持传入一个由破折号长度和空白长度组成的列表,来定义更加复杂的线型:

plt.plot(x, y1, linestyle=(0, (5, 2, 1, 2)), label='自定义线型')

 这里的 (5, 2, 1, 2) 表示先绘制5个单位长度的实线,然后2个单位长度的空白,再绘制1个单位长度的实线,然后2个单位长度的空白,形成一个自定义线型。

linewidth:设置线宽 

可以通过 linewidth 参数指定线条的宽度(单位为点数,pt) 

plt.plot(x, y, linewidth=2.5)

marker:标记数据点 

marker 参数用于指定数据点的标记样式。标记符号可以让图中的数据点更加突出。标记的大小、颜色等也可以进一步定制。常见的标记符号包括:

  • 'o':圆点
  • 's':方块
  • '^':三角形
plt.plot(x, y, marker='o')
相关参数详细介绍

 marker 示例

 以下是如何使用不同的标记符号的示例:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 10)
y = np.sin(x)

# 使用不同的标记符号
plt.plot(x, y, marker='o', label='圆标记')
plt.plot(x, y+1, marker='s', label='方形标记')
plt.plot(x, y+2, marker='^', label='正三角标记')

plt.legend()
plt.show()

 结果:(方块是中文,如何显示中文以后再说)

顺便提一嘴,左下角的这一块就是图例,图例这个之后再说。

在上面的例子中,我们分别使用了圆形、方形和三角形标记来标记不同的曲线。

 标记的进一步定制

markersize 参数

markersize 参数用于控制标记的大小(默认大小为6)。可以通过调整 markersize 来放大或缩小标记。其实就是控制标记的大小尺寸的一个参数,并没有什么可说的。

plt.plot(x, y, marker='o', markersize=10, label='大圆标记')

markerfacecolormarkeredgecolor 参数

  • markerfacecolor:控制标记的内部填充颜色。
  • markeredgecolor:控制标记的边框颜色。
plt.plot(x, y, marker='o', markersize=10, markerfacecolor='red', markeredgecolor='blue', label='红色填充,蓝色边框')

没什么可说的,自己可以尝试一下。

markeredgewidth 参数

markeredgewidth 参数用于控制标记边框的宽度。通过设置边框宽度,可以突出标记的外部轮廓。

plt.plot(x, y, marker='o', markersize=10, markeredgewidth=2, label='加粗边框')

自行尝试。 

组合使用标记参数 

 可以将不同的标记参数组合起来,实现个性化的图形标记:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 10)
y = np.sin(x)

plt.plot(x, y, marker='s', markersize=12, markerfacecolor='yellow', markeredgecolor='red', markeredgewidth=3, label='方形标记')
plt.legend()
plt.show()

 

 我们绘制了一个黄色填充的方形标记,外部使用了3个单位宽的红色边框。

仅绘制标记而无连线

 如果只想绘制标记而不显示连接它们的线条,可以将 linestyle 设置为 '' 或者 None

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 10)
y = np.sin(x)

plt.plot(x, y, marker='o', linestyle='None', label='仅标记')
plt.legend()
plt.show()

可以看到确实没线了,就剩下标记了。

组合使用参数 

可以将多个参数组合使用。例如,绘制一条红色的虚线,带有圆形标记的数据点: 

plt.plot(x, y, color='r', linestyle='--', marker='o', linewidth=2)

 结果就不放了,上面的代码就只是一个样例代码,大家可以手动尝试,只要记住多个参数可以一起使用就好。

处理多条曲线

 这一点很重要。

plot() 函数可以同时绘制多条曲线。只需传递多组 xy 数据:

示例: 

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 10)
y1 = np.sin(x)
y2 = np.cos(x)

plt.plot(x, y1, label='sin(x)')
plt.plot(x, y2, label='cos(x)')

# 添加图例
plt.legend()
plt.show()

结果:(右上角的一小块是图例)

xlable和ylabel

 xlabel()ylabel()matplotlib 中用于设置图形中 x 轴和 y 轴标签的函数。它们能够为绘制的图形的 x 轴和 y 轴添加描述性标签,帮助读者更好地理解图中每个轴表示的含义。

xlabel()ylabel() 的基本用法
  • plt.xlabel() 用于设置 x 轴标签。
  • plt.ylabel() 用于设置 y 轴标签。

基本格式如下: 

plt.xlabel('X轴标签')
plt.ylabel('Y轴标签')

示例 

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y = np.sin(x)

plt.plot(x, y)

# 设置x轴和y轴标签
plt.xlabel('X-time')
plt.ylabel('Y-sin')

plt.show()

 结果:

xlabel()ylabel() 的常用参数 

 

xlabel()ylabel() 函数不仅可以设置文本标签,还可以定制标签的字体、大小、颜色、对齐方式等。以下是常用的参数:

  • label:标签文本内容,即你要显示的文字。
  • fontdict:字典类型,用来指定字体的属性,如字体类型、大小、粗细等。
  • fontsize:设置字体大小。
  • loc:控制标签的对齐方式('left', 'center', 'right' 对于 xlabel()'bottom', 'center', 'top' 对于 ylabel())。
  • color:设置标签文字的颜色。
 参数详解及示例 
 fontsize 参数

可以通过 fontsize 参数控制标签文本的字体大小。 

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y = np.sin(x)

plt.plot(x, y)

# 设置x轴和y轴标签,并调整字体大小
plt.xlabel('X ', fontsize=14)
plt.ylabel('Y ', fontsize=14)

plt.show()

结果:

 

fontdict 参数 

fontdict 是一个字典,允许你更灵活地设置字体样式。它支持的属性包括 family(字体类型)、size(字体大小)、weight(字体粗细)、size(大小)等。 

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y = np.sin(x)

font = {'family': 'serif', 'color': 'darkred', 'weight': 'bold', 'size': 16}

plt.plot(x, y)

# 使用fontdict设置字体的多种属性
plt.xlabel('X ', fontdict=font)
plt.ylabel('Y ', fontdict=font)

plt.show()

结果:

 

color 参数 

 color 参数允许设置标签文本的颜色。

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y = np.sin(x)

plt.plot(x, y)

# 设置不同颜色的轴标签
plt.xlabel('X 轴', color='blue')
plt.ylabel('Y 轴', color='green')

plt.show()

结果:(方块是汉字)

 

loc 参数 

 loc 参数控制标签的对齐方式。对于 xlabel(),可以设置 'left', 'center', 'right';对于 ylabel(),可以设置 'bottom', 'center', 'top'

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y = np.sin(x)

plt.plot(x, y)

# 设置标签对齐方式
plt.xlabel('X ', loc='right')
plt.ylabel('Y ', loc='top')

plt.show()

结果:

 

自定义轴标签的高级示例 

通过组合不同的参数,可以自定义复杂的轴标签样式。例如:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y = np.sin(x)

plt.plot(x, y)

# 自定义字体属性
font_x = {'family': 'monospace', 'color': 'darkblue', 'weight': 'bold', 'size': 14}
font_y = {'family': 'monospace', 'color': 'darkgreen', 'weight': 'bold', 'size': 14}

# 使用自定义字体属性和颜色,设置标签
plt.xlabel('times(s)', fontdict=font_x, loc='right')
plt.ylabel('zhenfu(fudu)', fontdict=font_y, loc='top')

plt.show()

 结果:

在这个示例中,我们对 x 轴和 y 轴分别设置了不同的字体、颜色和对齐方式,使得图形更加个性化。 

结合 LaTeX 语法 

matplotlib 支持 LaTeX 语法,可以用于在标签中插入数学符号和公式。例如,如果想在 x 轴或 y 轴中加入数学公式,可以使用 LaTeX 格式的字符串。 

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y = np.sin(x)

plt.plot(x, y)

# 使用 LaTeX 表达式来展示数学符号
plt.xlabel(r'$x \, \mathrm{(seconds)}$', fontsize=14)
plt.ylabel(r'$\sin(x)$', fontsize=14)

plt.show()

 结果:

这个不常用其实。

其他常用参数 

label:用于图例

matplotlib 中,如果要同时显示多条折线,通常会使用 label 参数为每条曲线添加标签,然后使用 plt.legend() 函数来显示图例legend() 函数可以控制图例的显示位置。默认情况下,图例会显示在图的右上角。

默认图例显示 

当使用 label 参数标注曲线,并调用 plt.legend() 函数时,默认的图例位置是在右上角:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)

# 绘制两条曲线并添加标签
plt.plot(x, y1, label='sin(x)')
plt.plot(x, y2, label='cos(x)')

# 显示图例(默认在右上角)
plt.legend()
plt.show()

 结果:(看左下角那一小块)

在这个例子中,legend() 默认会将图例放在右上角。 

控制图例的位置

可以通过 plt.legend(loc=...) 参数来控制图例的位置。

loc 参数可以接受字符串或数字,代表图例相对于图的放置位置。下面是常见位置的描述: 

 

示例:设置图例位置 

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)

plt.plot(x, y1, label='sin(x)')
plt.plot(x, y2, label='cos(x)')

# 设置图例位置为左上角
plt.legend(loc='upper left')
plt.show()

结果:

 

可以通过传递 loc 参数的数字值或字符串来设置图例的位置。比如: 

plt.legend(loc=2)  # 等价于 loc='upper left'

 结果就不展示了,自己试试。

bbox_to_anchor 参数:自定义图例的位置

 bbox_to_anchormatplotlib 中用于精确定位图例(legend)的参数。它指定了图例的锚点相对于图形的位置,配合 loc 参数使用来控制图例的最终显示位置。

使用 loc 控制图例的大致方位,使用bbox_to_anchor 精确指定图例的位置。bbox_to_anchor 参数接受一个元组 (x, y),表示图例锚点的位置,通常与 loc 一起使用

  • (x, y) 中的 xy 是图例的锚点相对于图的坐标,通常是 [0, 1] 范围内的值。
  • 例如:(0, 0) 表示左下角,(1, 1) 表示右上角。

bbox_to_anchor 可以接受一个或多个参数,定义图例的位置和大小。常见的格式如下: 

plt.legend(loc='位置参数', bbox_to_anchor=(x, y), **kwargs)
  • loc:控制图例的锚点在 bbox_to_anchor 坐标上的哪个位置(如 'upper right', 'center', 'lower left' 等)。
  • bbox_to_anchor:定义锚点的具体位置 (x, y)xy 是相对图形坐标系的比例,(0, 0) 表示左下角,(1, 1) 表示右上角。

相关参数详解: 

  • xy:表示锚点的位置坐标,相对于图形的左下角为 (0, 0),右上角为 (1, 1)。你可以使用大于 1 或小于 0 的值将图例放置在图形外面。
  • 宽度和高度(可选):可以进一步指定图例框的宽度和高度,格式为 (x, y, width, height),通常不需要。

示例:自定义位置

将图例放置在图形的外部,通过 bbox_to_anchor 进行细致调整。

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)

plt.plot(x, y1, label='sin(x)')
plt.plot(x, y2, label='cos(x)')

# 图例放在图的外部,右侧
plt.legend(loc='upper right', bbox_to_anchor=(1.2, 1))


plt.show()

 结果:

 

 在这个例子中,图例的位置通过 (1.2, 1) 调整到了图的右外侧。

这个拿来跟(1,1)左上角对比就行,第一个值比1大了,图例基于左上角右移动了,如果比1小的话,就基于左上角左移。第二个值也是如此,大,上移,小,下移。总之是需要一个参照的。

或者说,一整个图,从最左到最有为0-1,从最下到最上0-1 ,如果出现超过0-1这个范围的数,就代表图片出图标了。

ncol 参数:控制图例的列数

legend() 还提供了 ncol 参数,允许你控制图例的列数。默认情况下,图例是单列显示。如果有很多条曲线,可以将它们分成多列。 

示例:设置图例为两列

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)

plt.plot(x, y1, label='sin(x)')
plt.plot(x, y2, label='cos(x)')

# 设置图例为两列
plt.legend(loc='upper right', ncol=2)
plt.show()

结果:

 

fontsize 参数:控制图例字体大小 

 这个就跟着控制字体、图像符号得尺寸的一样,图例的尺寸也是可以调控的。

以通过 fontsize 参数来控制图例中文本的字体大小:

plt.plot(x, y1, label='sin(x)')
plt.plot(x, y2, label='cos(x)')

# 设置图例字体大小为12
plt.legend(loc='upper right', fontsize=12)
plt.show()

自己尝试,这个就给个使用示例样本。

其他图例定制参数 
  • frameon:控制是否显示图例的边框(True/False)。
  • shadow:是否为图例添加阴影(True/False)。
  • title:为图例添加标题。

示例:设置图例的边框、阴影和标题 

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)

plt.plot(x, y1, label='sin(x)')
plt.plot(x, y2, label='cos(x)')

plt.legend(loc='upper right', shadow=True, title='函数图例', frameon=True)
plt.show()

 结果:(方块是中文)

 关于图例部份没有显示完全解决方法

上面的图例例子中出现了图例没有展示完全的情况,这种情况最快速的解决方法其实是调整白板的尺寸,前面讲过如何调整,也可以调整图例的位置和大小来解决。

alpha:透明度

alpha 参数控制曲线的透明度,取值范围是0到1。

plt.plot(x, y, alpha=0.5)

这个参数挺有意思的,上面是用法模板,大家自行尝试。

高级用法

设置坐标轴范围 

可以使用 plt.xlim()plt.ylim() 来设置坐标轴的范围。

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y = np.sin(x)
# y2 = np.cos(x)

plt.plot(x, y)
plt.xlim(0, 12)  # 设置x轴范围
plt.ylim(-1.5, 1.5)  # 设置y轴范围
plt.show()

结果:

 

设置坐标轴标签和图标题 
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y = np.sin(x)
# y2 = np.cos(x)

plt.plot(x, y)
plt.xlabel('x-axis')  # 设置x轴标签
plt.ylabel('y-axis')  # 设置y轴标签
plt.title('Sine Wave')  # 设置图标题
plt.show()

结果:

 

 解决问题:显示中文。

上面的实例中就出现了中文显示不出来以一种方框的形式代替,下面将介绍该问题的解决方法。

matplotlib 中显示中文需要进行一些设置,因为默认的字体不支持中文字符。如果直接使用中文,可能会出现乱码或方块显示的问题。为了正确显示中文,可以设置 matplotlib 使用支持中文的字体。

下面是显示中文的几种方法和步骤:

1. 使用支持中文的字体

matplotlib 默认使用的字体可能不支持中文字符,所以我们需要设置一个支持中文的字体,如 SimHei(黑体) 或 Microsoft YaHei(微软雅黑)。

方法 1:全局设置字体

通过 matplotlibrcParams 来设置全局的字体,使其支持中文。

import matplotlib.pyplot as plt
import numpy as np

# 设置全局的字体为 SimHei (黑体) 来显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用黑体显示中文
plt.rcParams['axes.unicode_minus'] = False    # 解决负号'-'显示为方块的问题

x = np.linspace(0, 10, 100)
y = np.sin(x)

plt.plot(x, y)

# 设置中文标签
plt.xlabel('时间 (秒)')
plt.ylabel('正弦值')
plt.title('正弦波示例')

plt.show()

 结果:

 

  • font.sans-serif:指定字体为 SimHei(黑体),这是一种常见的支持中文的字体。
  • axes.unicode_minus:解决负号(-)显示为方块的问题。

注意: 这里的 ['SimHei'] 是直接使用字体的名称,而不是字体文件的路径。

具体解释:

  • plt.rcParams['font.sans-serif'] = ['SimHei']:这行代码设置全局字体为 "SimHei"(黑体)。SimHei 是一种常见的中文字体。如果你的系统已经安装了这个字体,它会自动应用到图中的所有文本元素(如图例、轴标签、标题等)。你不需要提供字体的路径,只需提供字体的名称。

方法 2:为单个图设置字体

你也可以只为特定的标签或图形设置字体,而不是全局设置。

这是我经常使用的方法,其实没有第一个那么好用感觉

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y = np.cos(x)

plt.plot(x, y)

# 设置中文字体仅用于这个标签
plt.xlabel('时间 (秒)', fontproperties='SimHei')
plt.ylabel('余弦值', fontproperties='SimHei')
plt.title('余弦波示例', fontproperties='SimHei')

plt.show()

 结果:

2. 确认系统中可用的字体

如果你不确定系统中有哪些支持中文的字体,可以通过 matplotlibFontManager 查看所有可用的字体。

import matplotlib.font_manager as fm

# 获取系统中所有可用的字体
for font in fm.findSystemFonts(fontpaths=None, fontext='ttf'):
    print(fm.FontProperties(fname=font).get_name())

执行这段代码后,你会看到系统中所有的可用字体名称。找到支持中文的字体名称,然后在代码中使用该字体。

比如我的:

 

3. 在不同操作系统上的字体设置

  • Windows: 常见的支持中文的字体有 SimHei(黑体)和 Microsoft YaHei(微软雅黑)。
  • macOS: 可以使用 Heiti SC(黑体简体)或 PingFang SC(苹方简体)。
  • Linux: 可能需要安装中文字体包,如 SimHeiNoto Sans CJK

Windows 示例

plt.rcParams['font.sans-serif'] = ['SimHei']  # SimHei 为 Windows 系统上常见的中文字体
plt.rcParams['axes.unicode_minus'] = False

macOS 示例 

plt.rcParams['font.sans-serif'] = ['Heiti SC']  # Heiti SC 为 macOS 上支持中文的字体
plt.rcParams['axes.unicode_minus'] = False

Linux 示例

在 Linux 系统上,首先需要确保安装了支持中文的字体包(如 SimHeiNoto Sans CJK)。安装字体后,可以通过 rcParams 配置字体。 

# Ubuntu 安装 SimHei 字体
sudo apt-get install fonts-noto-cjk

 然后在 Python 中设置:

plt.rcParams['font.sans-serif'] = ['Noto Sans CJK SC']  # Noto Sans CJK SC 为支持中文的字体
plt.rcParams['axes.unicode_minus'] = False

4. 安装字体(如 SimHei)

如果系统中没有中文字体,可以手动下载并安装字体。(这里可以理解为自动检索不到系统字体)在 Windows、macOS 和 Linux 系统中安装字体后,你可以使用 FontManager 加载字体。

示例:手动加载字体

 

import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties

# 手动加载字体文件 (SimHei.ttf)
font = FontProperties(fname='/path/to/SimHei.ttf')

x = [1, 2, 3]
y = [4, 5, 6]

plt.plot(x, y)

# 使用加载的字体设置中文标签
plt.xlabel('时间 (秒)', fontproperties=font)
plt.ylabel('数值', fontproperties=font)
plt.title('折线图', fontproperties=font)

plt.show()

注意: 这一块是填的自己的字体文件路径。

结果:

5. 使用 matplotlibrc 参数

可以通过 rc 配置参数直接设置字体。

import matplotlib as mpl
x = [1, 2, 3]
y = [4, 5, 6]
# 使用 rc 函数设置字体
mpl.rc('font', family='SimHei')  # 设置全局字体为 SimHei

plt.plot(x, y)
plt.xlabel('时间 (秒)')
plt.ylabel('值')
plt.title('示例')
plt.show()

 结果:

fontsize 调整字体大小

调整文字大小的参数是 fontsize,它适用于标签、标题、图例等元素,无论是中文字符还是英文字符都可以通过 fontsize 来调整字体大小。

很多方法例如只要是涉及到字的甭管是汉字还是英文啥的,都有这个参数。

提一嘴:图例的默认字体大小是10

很多的基本默认都是10,他们也会根据你的图标的大小之类自行调整,如果没有明确定义参数的大小的话

PS:以上就是关于画图基础用法和plot画图详细介绍和使用的所有内容,我也是从各个方面进行的资源整合,大家可以作为笔记来看,制作不易,如果可以请点了赞,非常感谢。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2181570.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PHP反序列化8(phar反序列化)

考点8&#xff1a;phar反序列化 <aside> &#x1f4a1; 使用条件 </aside> 文件上传时&#xff0c;不必要.phar后缀&#xff0c;文件上传不是难点&#xff01;&#xff01;&#xff01;&#xff08;phar伪协议自动解析成.phar文件&#xff09; phar文件本质上是…

【网络安全】内部应用中的多重漏洞利用

未经许可,不得转载。 文章目录 初步发现:帐户枚举利用帐户枚举发现 IDOR 导致帐户接管拦截请求洪水攻击:注册拒绝服务目标网站:https://redacted.com 初步发现:帐户枚举 在最近的一次渗透测试中,我对一个仅供员工使用的内部应用程序进行了评估,重点关注身份验证和帐户…

LangChain进阶技巧:提高聊天机器人性能的策略[第三课]

LangChain应运而生&#xff0c;为开发者们提供了一种高效、便捷的工具&#xff0c;助力他们构建出功能强大的大型语言模型应用。本文将带您走进LangChain的世界&#xff0c;揭秘其背后的技术原理&#xff0c;探讨如何利用这一利器来拓展语言模型的无限可能。通过丰富的实例分析…

数据订阅与消费中间件Canal 服务搭建(docker)

MySQL Bin-log开启 进入mysql容器 docker exec -it mysql5.7 bash开启mysql的binlog cd /etc/mysql/mysql.conf.dvi mysqld.cnf #在文件末尾处添加如下配置&#xff08;如果没有这个文件就创建一个&#xff09; [mysqld] # 开启 binlog log-binmysql-bin #log-bin/var/lib/mys…

宿州儿童自闭症寄宿制学校:培养孩子独立能力的专业机构

在探索自闭症儿童教育的广阔领域里&#xff0c;宿州儿童自闭症寄宿制学校以其专业的教育模式和显著的成效&#xff0c;为众多家庭带来了希望。然而&#xff0c;当我们把目光投向中国南方的繁华都市——广州&#xff0c;会发现另一所同样在自闭症儿童教育领域深耕多年、成果显著…

P3397 地毯 Python题解

地毯 题目描述 在 n n n\times n nn 的格子上有 m m m 个地毯。 给出这些地毯的信息&#xff0c;问每个点被多少个地毯覆盖。 输入格式 第一行&#xff0c;两个正整数 n , m n,m n,m。意义如题所述。 接下来 m m m 行&#xff0c;每行两个坐标 ( x 1 , y 1 ) (x_1,…

在矩池云使用 Llama-3.2-11B-Vision 详细指南

Llama 3.2-Vision是Meta开发的一系列多模态大型语言模型&#xff08;LLMs&#xff09;&#xff0c;包含11B和90B两种规模的预训练和指令调整模型。 这些模型专门优化用于视觉识别、图像推理、字幕生成和回答有关图像的一般问题。Llama 3.2-Vision模型在常见行业基准测试中的表…

docker下载mysql时出现Unable to pull mysql:latest (HTTP code 500) server error 问题

报错 Unable to pull mysql:latest (HTTP code 500) server error - Get “https://registry-1.docker.io/v2/”: EOF 解决方法 将VPN开到Global模式 解决啦

C# 解决Excel边框样式无法复制问题及实现格式刷功能

目录 问题现象 范例运行环境 解决方案 剪贴板加特殊粘贴 自定义样式 直接赋值 完美方案 小结 问题现象 在运行数据表数据导出到 EXCEL 数据输出时遇到了一个问题&#xff0c;开发者设计了单行细线下边框的输出模板&#xff0c;如下图设计&#xff1a; 其中 <%syst…

机器学习篇-day02-KNN算法实现鸢尾花模型和手写数字识别模型

一. KNN简介 KNN思想 K-近邻算法&#xff08;K Nearest Neighbor&#xff0c;简称KNN&#xff09;。比如&#xff1a;根据你的“邻居”来推断出你的类别 KNN算法思想&#xff1a;如果一个样本在特征空间中的k 个最相似的样本中的大多数属于某一个类别&#xff0c;则该样本也属…

sentinelhub3.7相比3.4的版本主要变化

sentinelhub3.7相比3.4的版本&#xff0c;主要变化包括: 1. 增加对sentinel 基线04.00数据产品的支持&#xff1b; 2. 将aws数据下载模块独立出来 3.4版本 3.7版本 3. 原来的DataSource改为DataCollection 3.7版本不再支持DataSource 3.4版本中的DataSource 3.7版本使用Data…

鸿蒙NEXT入门到实战(基于最新api12稳定版)

注意&#xff1a;博主有个鸿蒙专栏&#xff0c;里面从上到下有关于鸿蒙next的教学文档&#xff0c;大家感兴趣可以学习下 如果大家觉得博主文章写的好的话&#xff0c;可以点下关注&#xff0c;博主会一直更新鸿蒙next相关知识 专栏地址: https://blog.csdn.net/qq_56760790/…

音频信号处理学习

来源B站&#xff0c;但是代码微改&#xff0c;更好理解。 B站网址&#xff1a;https://www.bilibili.com/video/BV1vT411m7yc/?spm_id_from333.788&vd_sourcec105ef445d9ba79ff025b5ba5869ce2b import mathimport librosa import numpy as np import matplotlib.pyplot a…

【floor报错注入】

一、sql语句基础 floor 向下取整 count 取数据的数量 group by 分组查询 Rand 随机数 limit 二、floor报错注入 主键重复报错 我们先了解group by产生的虚拟表的原理&#xff0c;了解到虚拟表的主键是不可以重复的 我们再可以通过Rand(0)函数规定固定种子后乘2&…

Jmeter常用函数、逻辑控制器

目录 一、Jmeter常用函数 counter函数 machineName函数 machineIP函数 Random函数 RandomString函数 RandomDate函数 time函数 二、逻辑控制器 IF控制器 循环控制器 foreach控制器 仅一次控制器 事务控制器 聚合报告 随机控制器 随机顺序控制器 一、Jmeter常用…

Webpack 打包后文件过大,如何优化?

聚沙成塔每天进步一点点 本文回顾 ⭐ 专栏简介Webpack 打包后文件过大&#xff0c;如何优化&#xff1f;1. 代码分割&#xff08;Code Splitting&#xff09;1.1 概念1.2 Webpack 的 SplitChunksPlugin示例配置&#xff1a; 1.3 按需加载&#xff08;Lazy Loading&#xff09;示…

位运算(1)_常见位运算总结

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 位运算(1)_常见位运算总结 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 1. 基…

综合练习 学习案例

//验证码 前四位是字母 最后一位是数字 public class test1 {public static void main(String[] args){char [] charsnew char[52];for (int i 0; i <chars.length ; i) {if(i<25){chars[i](char)(i97);}else{chars[i](char)(i65-26);}}Random rnew Random();String cod…

虚商目前有哪些业务痛点?

虚拟运营商当前面临的业务痛点主要集中在市场竞争、运营成本、技术依赖、用户体验及政策监管等方面。 一、市场竞争激烈 1、竞争者数量增加: 随着市场准入门槛的降低&#xff0c;越来越多的企业进入虚拟运营商市场导致市场竟争日益激烈。为了争夺市场份额&#xff0c;企业不得不…

高校体育场小程序|高校体育场管理系统系统|体育场管理系统小程序设计与实现(源码+数据库+文档)

高校体育场管理系统小程序 目录 体育场管理系统小程序设计与实现 一、前言 二、系统功能设计 三、系统实现 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道…