matplotlib.pyplot学习笔记

import matplotlib.pyplot as plt
import numpy as np

# 画单条线
plot([x], y, [fmt], *, data=None, **kwargs)
# 画多条线
plot([x], y, [fmt], [x2], y2, [fmt2], ..., **kwargs)

>>> plot(x, y)        # 创建 y 中数据与 x 中对应值的二维线图,使用默认样式
>>> plot(x, y, 'bo')  # 创建 y 中数据与 x 中对应值的二维线图,使用蓝色实心圈绘制
>>> plot(y)           # x 的值为 0..N-1
>>> plot(y, 'r+')     # 使用红色 + 号

颜色字符:'b' 蓝色,'m' 洋红色,'g' 绿色,'y' 黄色,'r' 红色,'k' 黑色,'w' 白色,'c' 青绿色,'#008000' RGB 颜色符串。多条曲线不指定颜色时,会自动选择不同颜色。

线型参数:'‐' 实线,'‐‐' 破折线,'‐.' 点划线,':' 虚线。

标记字符:'.' 点标记,',' 像素标记(极小点),'o' 实心圈标记,'v' 倒三角标记,'^' 上三角标记,'>' 右三角标记,'<' 左三角标记...等等。

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

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

例如 o:r,o 表示实心圆标记,: 表示虚线,r 表示颜色为红色。#设置参数值若非数字需要加单引号

绘图标记

marker 参数来定义,eg:plt.plot(ypoints, marker = 'o')

标记大小与颜色

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

Matplotlib 绘图线

线的类型可以使用 linestyle 参数来定义,简写为 ls。eg:plt.plot(ypoints, linestyle = 'dotted')#点虚线

线的颜色可以使用 color 参数来定义,简写为 c。当然也可以自定义颜色类型,例如:SeaGreen、#8FBC8F 等,完整样式可以参考 HTML 颜色值。

eg:plt.plot(ypoints, color = 'r')

线的宽度可以使用 linewidth 参数来定义,简写为 lw,值可以是浮点数,如:12.05.67 等。

轴标签和标题

我们可以使用 xlabel() 和 ylabel() 方法来设置 x 轴和 y 轴的标签。

eg:

plt.xlabel("x - label")
plt.ylabel("y - label")

我们可以使用 title() 方法来设置标题。eg:plt.title("RUNOOB TEST TITLE")

图形中文显示

Matplotlib 默认情况不支持中文,我们可以使用以下简单的方法来解决。

这里我们使用思源黑体,思源黑体是 Adobe 与 Google 推出的一款开源字体。

官网:思源宋体

GitHub 地址:https://github.com/adobe-fonts/source-han-sans/tree/release/OTF/SimplifiedChinese

打开链接后,在里面选一个就好了:

可以下载个 OTF 字体,比如 SourceHanSansSC-Bold.otf,将该文件文件放在当前执行的代码文件中:

SourceHanSansSC-Bold.otf 文件放在当前执行的代码文件中:

import numpy as np 
from matplotlib import pyplot as plt 
import matplotlib# fname 为 你下载的字体库路径,注意 SourceHanSansSC-Bold.otf 字体的路径
zhfont1 = matplotlib.font_manager.FontProperties(fname="SourceHanSansSC-Bold.otf") x = np.arange(1,11) 
y =  2  * x +  5 
plt.title("菜鸟教程 - 测试", fontproperties=zhfont1) # fontproperties 设置中文显示,fontsize 设置字体大小
plt.xlabel("x 轴", fontproperties=zhfont1)
plt.ylabel("y 轴", fontproperties=zhfont1)
plt.plot(x,y) 
plt.show()

标题与标签的定位

title() 方法提供了 loc 参数来设置标题显示的位置,可以设置为: 'left', 'right', 和 'center', 默认值为 'center'

xlabel() 方法提供了 loc 参数来设置 x 轴显示的位置,可以设置为: 'left', 'right', 和 'center', 默认值为 'center'

ylabel() 方法提供了 loc 参数来设置 y 轴显示的位置,可以设置为: 'bottom', 'top', 和 'center', 默认值为 'center'

plt.xlabel("x 轴", fontproperties=zhfont1, loc="left")
plt.ylabel("y 轴", fontproperties=zhfont1, loc="top")

Matplotlib 网格线

我们可以使用 pyplot 中的 grid() 方法来设置图表中的网格线。

matplotlib.pyplot.grid(b=None, which='major', axis='both', )

  • b:可选,默认为 None,可以设置布尔值,true 为显示网格线,false 为不显示,如果设置 **kwargs 参数,则值为 true。
  • which:可选,可选值有 'major'、'minor' 和 'both',默认为 'major',表示应用更改的网格线。
  • axis:可选,设置显示哪个方向的网格线,可以是取 'both'(默认),'x' 或 'y',分别表示两个方向,x 轴方向或 y 轴方向。
  • **kwargs:可选,设置网格样式,可以是 color='r', linestyle='-' 和 linewidth=2,分别表示网格线的颜色,样式和宽度。

以下实例添加一个简单的网格线,参数使用默认值:

import numpy as np
import matplotlib.pyplot as plt

x = np.array([1, 2, 3, 4])
y = np.array([1, 4, 9, 16])
plt.title("RUNOOB grid() Test")
plt.xlabel("x - label")
plt.ylabel("y - label")

plt.plot(x, y)

plt.grid()#plt.grid(axis='x') #这样子是x轴上有竖线# 设置 y 就在轴方向显示网格线

plt.show()

以下实例添加一个简单的网格线,并设置网格线的样式,格式如下:

grid(color = 'color', linestyle = 'linestyle', linewidth = number)

color:'b' 蓝色,'m' 洋红色,'g' 绿色,'y' 黄色,'r' 红色,'k' 黑色,'w' 白色,'c' 青绿色,'#008000' RGB 颜色符串。

linestyle:'‐' 实线,'‐‐' 破折线,'‐.' 点划线,':' 虚线。

linewidth:设置线的宽度,可以设置一个数字。

plt.grid(color = 'r', linestyle = '--', linewidth = 0.5)

Matplotlib 绘制多图

我们可以使用 pyplot 中的 subplot() 和 subplots() 方法来绘制多个子图。

subplot() 方法在绘图时需要指定位置,subplots() 方法可以一次生成多个,在调用时只需要调用生成对象的 ax 即可。

subplot(nrows, ncols, index, **kwargs)
subplot(pos, **kwargs)
subplot(**kwargs)
subplot(ax)

以上函数将整个绘图区域分成 nrows 行和 ncols 列,然后从左到右,从上到下的顺序对每个子区域进行编号 1...N ,左上的子区域的编号为 1、右下的区域编号为 N,编号可以通过参数 index 来设置。

设置 numRows = 1,numCols = 2,就是将图表绘制成 1x2 的图片区域, 对应的坐标为:

(1, 1), (1, 2)

plotNum = 1, 表示的坐标为(1, 1), 即第一行第一列的子图。

plotNum = 2, 表示的坐标为(1, 2), 即第一行第二列的子图。

plt.suptitle("RUNOOB subplot Test")#设置整个框的标题

eg:

import matplotlib.pyplot as plt
import numpy as np#plot 1:
xpoints = np.array([0, 6])
ypoints = np.array([0, 100])plt.subplot(1, 2, 1)
plt.plot(xpoints,ypoints)
plt.title("plot 1")#plot 2:
x = np.array([1, 2, 3, 4])
y = np.array([1, 4, 9, 16])plt.subplot(1, 2, 2)
plt.plot(x,y)
plt.title("plot 2")plt.suptitle("RUNOOB subplot Test")
plt.show()

subplots() 方法语法格式如下:

matplotlib.pyplot.subplots(nrows=1, ncols=1, *, sharex=False, sharey=False, squeeze=True, subplot_kw=None, gridspec_kw=None, **fig_kw)

参数说明:

  • nrows:默认为 1,设置图表的行数。
  • ncols:默认为 1,设置图表的列数。
  • sharex、sharey:设置 x、y 轴是否共享属性,默认为 false,可设置为 'none'、'all'、'row' 或 'col'。 False 或 none 每个子图的 x 轴或 y 轴都是独立的,True 或 'all':所有子图共享 x 轴或 y 轴,'row' 设置每个子图行共享一个 x 轴或 y 轴,'col':设置每个子图列共享一个 x 轴或 y 轴。
  • squeeze:布尔值,默认为 True,表示额外的维度从返回的 Axes(轴)对象中挤出,对于 N*1 或 1*N 个子图,返回一个 1 维数组,对于 N*M,N>1 和 M>1 返回一个 2 维数组。如果设置为 False,则不进行挤压操作,返回一个元素为 Axes 实例的2维数组,即使它最终是1x1。
  • subplot_kw:可选,字典类型。把字典的关键字传递给 add_subplot() 来创建每个子图。
  • gridspec_kw:可选,字典类型。把字典的关键字传递给 GridSpec 构造函数创建子图放在网格里(grid)。
  • **fig_kw:把详细的关键字参数传给 figure() 函数。
import matplotlib.pyplot as plt
import numpy as np# 创建一些测试数据 -- 图1
x = np.linspace(0, 2*np.pi, 400)
y = np.sin(x**2)# 创建一个画像和子图 -- 图2
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_title('Simple plot')# 创建两个子图 -- 图3
f, (ax1, ax2) = plt.subplots(1, 2, sharey=True)
ax1.plot(x, y)
ax1.set_title('Sharing Y axis')
ax2.scatter(x, y)# 创建四个子图 -- 图4
fig, axs = plt.subplots(2, 2, subplot_kw=dict(projection="polar"))
axs[0, 0].plot(x, y)
axs[1, 1].scatter(x, y)# 共享 x 轴
plt.subplots(2, 2, sharex='col')# 共享 y 轴
plt.subplots(2, 2, sharey='row')# 共享 x 轴和 y 轴
plt.subplots(2, 2, sharex='all', sharey='all')# 这个也是共享 x 轴和 y 轴
plt.subplots(2, 2, sharex=True, sharey=True)# 创建标识为 10 的图,已经存在的则删除
fig, ax = plt.subplots(num=10, clear=True)plt.show()

#fig, ax = plt.subplots()是

fig = plt.figure()

ax = plt.subplot(111)

的缩写,#

  • plt.subplot(111)是plt.subplot(1, 1, 1)另一个写法而已[引用链接],更完整的写法是plt.subplot(nrows=1, ncols=1, index=1)[官网matplot.pyplot.subplot链接]

Matplotlib 散点图

我们可以使用 pyplot 中的 scatter() 方法来绘制散点图。

scatter() 方法语法格式如下:

matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, *, edgecolors=None, plotnonfinite=False, data=None, **kwargs)

x,y:长度相同的数组,也就是我们即将绘制散点图的数据点,输入数据。

s:点的大小,默认 20,也可以是个数组,数组每个参数为对应点的大小。

c:点的颜色,默认蓝色 'b',也可以是个 RGB 或 RGBA 二维行数组。

marker:点的样式,默认小圆圈 'o'。

cmap:Colormap,默认 None,标量或者是一个 colormap 的名字,只有 c 是一个浮点数数组的时才使用。如果没有申明就是 image.cmap。

norm:Normalize,默认 None,数据亮度在 0-1 之间,只有 c 是一个浮点数的数组的时才使用。

vmin,vmax::亮度设置,在 norm 参数存在时会忽略。

alpha::透明度设置,0-1 之间,默认 None,即不透明。

linewidths::标记点的长度。

edgecolors::颜色或颜色序列,默认为 'face',可选值有 'face', 'none', None。

plotnonfinite::布尔值,设置是否使用非限定的 c ( inf, -inf 或 nan) 绘制点。

**kwargs::其他参数。

设置图标大小:

import matplotlib.pyplot as plt
import numpy as np

x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
y = np.array([1, 4, 9, 16, 7, 11, 23, 18])
sizes = np.array([20,50,100,200,500,1000,60,90])
plt.scatter(x, y, s=sizes)

plt.show()

自定义点的颜色:

colors = np.array(["red","green","black","orange","purple","beige","cyan","magenta"])

plt.scatter(x, y, c=colors)

设置两组散点图:

import matplotlib.pyplot as plt
import numpy as np

x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
plt.scatter(x, y, color = 'hotpink')

x = np.array([2,2,8,1,15,8,12,9,7,3,11,4,7,14,12])
y = np.array([100,105,84,105,90,99,90,95,94,100,79,112,91,80,85])
plt.scatter(x, y, color = '#88c999')

plt.show()

出现在同一图里

使用随机数来设置散点图:

# 随机数生成器的种子
np.random.seed(19680801)

N = 50
x = 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 radii#设置随机大小的方法

plt.scatter(x, y, s=area, c=colors, alpha=0.5) # 设置颜色及透明度


plt.title("RUNOOB Scatter Test") # 设置标题

plt.show()

颜色条 Colormap

设置颜色条需要使用 cmap 参数,默认值为 'viridis',之后颜色值设置为 0 到 100 的数组。

Matplotlib 模块提供了很多可用的颜色条。

颜色条就像一个颜色列表,其中每种颜色都有一个范围从 0 到 100 的值。

colors = np.array([0, 10, 20, 30, 40, 45, 50, 55, 60, 70, 80, 90, 100])

plt.scatter(x, y, c=colors, cmap='viridis')

如果要显示颜色条,需要使用 plt.colorbar()

直接加上plt.colorbar()

换个颜色条参数, 例如cmap 设置为 afmhot_r:这个偏暖

Matplotlib 柱形图

我们可以使用 pyplot 中的 bar() 方法来绘制柱形图。

bar() 方法语法格式如下:

matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)

参数说明:

x:浮点型数组,柱形图的 x 轴数据。#也可以设置为字符

height:浮点型数组,柱形图的高度。

width:浮点型数组,柱形图的宽度。

bottom:浮点型数组,底座的 y 坐标,默认 0。

align:柱形图与 x 坐标的对齐方式,'center' 以 x 位置为中心,这是默认值。 'edge':将柱形图的左边缘与 x 位置对齐。要对齐右边缘的条形,可以传递负数的宽度值及 align='edge'。

**kwargs::其他参数。

以下实例我们简单实用 bar() 来创建一个柱形图:

import matplotlib.pyplot as plt
import numpy as np

x = np.array(["Runoob-1", "Runoob-2", "Runoob-3", "C-RUNOOB"])
y = np.array([12, 22, 6, 18])

plt.bar(x,y)
plt.show()

垂直方向的柱形图可以使用 barh() 方法来设置:

x = np.array(["Runoob-1", "Runoob-2", "Runoob-3", "C-RUNOOB"])
y = np.array([12, 22, 6, 18])

plt.barh(x,y)
plt.show()

设置柱形图颜色:plt.bar(x, y, color = "#4CAF50")#绿色

自定义各个柱形的颜色:plt.bar(x, y,  color = ["#4CAF50","red","hotpink","#556B2F"])

设置柱形图宽度,bar() 方法使用 width 设置,barh() 方法使用 height 设置 height

#plt.bar(x, y, width = 0.1)

plt.barh(x, y, height = 0.1)

Matplotlib 饼图

我们可以使用 pyplot 中的 pie() 方法来绘制饼图。

pie() 方法语法格式如下:

matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=0, radius=1, counterclock=True, wedgeprops=None, textprops=None, center=0, 0, frame=False, rotatelabels=False, *, normalize=None, data=None)[source]

参数说明:

  • x:浮点型数组或列表,用于绘制饼图的数据,表示每个扇形的面积。

  • explode:数组,表示各个扇形之间的间隔,默认值为0。

  • labels:列表,各个扇形的标签,默认值为 None。

  • colors:数组,表示各个扇形的颜色,默认值为 None。

  • autopct:设置饼图内各个扇形百分比显示格式,%d%% 整数百分比,%0.1f 一位小数, %0.1f%% 一位小数百分比, %0.2f%% 两位小数百分比。

  • labeldistance:标签标记的绘制位置,相对于半径的比例,默认值为 1.1,如 <1则绘制在饼图内侧。

  • pctdistance::类似于 labeldistance,指定 autopct 的位置刻度,默认值为 0.6。

  • shadow::布尔值 True 或 False,设置饼图的阴影,默认为 False,不设置阴影。

  • radius::设置饼图的半径,默认为 1。

  • startangle::用于指定饼图的起始角度,默认为从 x 轴正方向逆时针画起,如设定 =90 则从 y 轴正方向画起。

  • counterclock:布尔值,用于指定是否逆时针绘制扇形,默认为 True,即逆时针绘制,False 为顺时针。

  • wedgeprops :字典类型,默认值 None。用于指定扇形的属性,比如边框线颜色、边框线宽度等。例如:wedgeprops={'linewidth':5} 设置 wedge 线宽为5。
  • textprops :字典类型,用于指定文本标签的属性,比如字体大小、字体颜色等,默认值为 None。
  • center :浮点类型的列表,用于指定饼图的中心位置,默认值:(0,0)。
  • frame :布尔类型,用于指定是否绘制饼图的边框,默认值:False。如果是 True,绘制带有表的轴框架。
  • rotatelabels :布尔类型,用于指定是否旋转文本标签,默认为 False。如果为 True,旋转每个 label 到指定的角度。
  • data:用于指定数据。如果设置了 data 参数,则可以直接使用数据框中的列作为 x、labels 等参数的值,无需再次传递。

除此之外,pie() 函数还可以返回三个参数:

  • wedges:一个包含扇形对象的列表。

  • texts:一个包含文本标签对象的列表。

  • autotexts:一个包含自动生成的文本标签对象的列表。

以下实例我们简单实用 pie() 来创建一个饼图:

import matplotlib.pyplot as plt
import numpy as np

y = np.array([35, 25, 25, 15])

plt.pie(y)
plt.show()

设置饼图各个扇形的标签与颜色:

plt.pie(y,
        labels=['A','B','C','D'], # 设置饼图标签
        colors=["#d5695d", "#5d8ca8", "#65a479", "#a564c9"], # 设置饼图颜色
       )
plt.title("RUNOOB Pie Test") # 设置标题

突出显示第二个扇形,并格式化输出百分比:

import matplotlib.pyplot as plt# 数据
sizes = [15, 30, 45, 10]# 饼图的标签
labels = ['A', 'B', 'C', 'D']# 饼图的颜色
colors = ['yellowgreen', 'gold', 'lightskyblue', 'lightcoral']# 突出显示第二个扇形
explode = (0, 0.1, 0, 0)# 绘制饼图
plt.pie(sizes, explode=explode, labels=labels, colors=colors,autopct='%1.1f%%', shadow=True, startangle=90)# 标题
plt.title("RUNOOB Pie Test")# 显示图形
plt.show()

我们定义了一个包含 4 个元素的元组 explode,它用来指定是否突出某个扇形。接着,我们调用 plt.pie 函数来绘制饼图,其中传入了上述参数。最后,我们添加了一个标题,并调用 plt.show() 来显示图形。注意:默认情况下,第一个扇形的绘制是从 x 轴开始并逆时针移动.

Matplotlib 直方图

我们可以使用 pyplot 中的 hist() 方法来绘制直方图。

matplotlib.pyplot.hist(x, bins=None, range=None, density=False, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False, **kwargs)

参数说明:

  • x:表示要绘制直方图的数据,可以是一个一维数组或列表。
  • bins:可选参数,表示直方图的箱数。默认为10。
  • range:可选参数,表示直方图的值域范围,可以是一个二元组或列表。默认为None,即使用数据中的最小值和最大值。
  • density:可选参数,表示是否将直方图归一化。默认为False,即直方图的高度为每个箱子内的样本数,而不是频率或概率密度。
  • weights:可选参数,表示每个数据点的权重。默认为None。
  • cumulative:可选参数,表示是否绘制累积分布图。默认为False。
  • bottom:可选参数,表示直方图的起始高度。默认为None。
  • histtype:可选参数,表示直方图的类型,可以是'bar'、'barstacked'、'step'、'stepfilled'等。默认为'bar'。
  • align:可选参数,表示直方图箱子的对齐方式,可以是'left'、'mid'、'right'。默认为'mid'。
  • orientation:可选参数,表示直方图的方向,可以是'vertical'、'horizontal'。默认为'vertical'。
  • rwidth:可选参数,表示每个箱子的宽度。默认为None。
  • log:可选参数,表示是否在y轴上使用对数刻度。默认为False。
  • color:可选参数,表示直方图的颜色。
  • label:可选参数,表示直方图的标签。
  • stacked:可选参数,表示是否堆叠不同的直方图。默认为False。
  • **kwargs:可选参数,表示其他绘图参数。

import matplotlib.pyplot as plt
import numpy as np

# 生成一组随机数据
data = np.random.randn(1000)

# 绘制直方图
plt.hist(data, bins=30, color='skyblue', alpha=0.8)

# 设置图表属性
plt.title('RUNOOB hist() Test')
plt.xlabel('Value')
plt.ylabel('Frequency')

# 显示图表
plt.show()

以下实例演示了如何使用 hist() 函数绘制多个数据组的直方图,并进行比较:

import matplotlib.pyplot as plt
import numpy as np# 生成三组随机数据
data1 = np.random.normal(0, 1, 1000)
data2 = np.random.normal(2, 1, 1000)
data3 = np.random.normal(-2, 1, 1000)# 绘制直方图
plt.hist(data1, bins=30, alpha=0.5, label='Data 1')
plt.hist(data2, bins=30, alpha=0.5, label='Data 2')
plt.hist(data3, bins=30, alpha=0.5, label='Data 3')# 设置图表属性
plt.title('RUNOOB hist() TEST')
plt.xlabel('Value')
plt.ylabel('Frequency')
plt.legend()# 显示图表
plt.show()

以下实例我们结合 Pandas 来绘制直方图:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 使用 NumPy 生成随机数
random_data = np.random.normal(170, 10, 250)
# 将数据转换为 Pandas DataFrame
dataframe = pd.DataFrame(random_data)
# 使用 Pandas hist() 方法绘制直方图
dataframe.hist()
# 设置图表属性
plt.title('RUNOOB hist() Test')
plt.xlabel('X-Value')
plt.ylabel('Y-Value')

# 显示图表
plt.show()

除了数据框之外,您还可以使用 Pandas 中的 Series 对象绘制直方图。只需将数据框中的列替换为 Series 对象即可。

# 生成随机数据
data = pd.Series(np.random.normal(size=100))
# 绘制直方图
# bins 参数指定了直方图中的柱子数量
plt.hist(data, bins=10)

Matplotlib imshow() 方法

imshow() 函数是 Matplotlib 库中的一个函数,用于显示图像。

imshow() 函数常用于绘制二维的灰度图像或彩色图像。

imshow() 函数可用于绘制矩阵、热力图、地图等。

imshow() 方法语法格式如下:

imshow(X, cmap=None, norm=None, aspect=None, interpolation=None, alpha=None, vmin=None, vmax=None, origin=None, extent=None, shape=None, filternorm=1, filterrad=4.0, imlim=None, resample=None, url=None, *, data=None, **kwargs)

参数说明:

  • X:输入数据。可以是二维数组、三维数组、PIL图像对象、matplotlib路径对象等。
  • cmap:颜色映射。用于控制图像中不同数值所对应的颜色。可以选择内置的颜色映射,如grayhotjet等,也可以自定义颜色映射。
  • norm:用于控制数值的归一化方式。可以选择NormalizeLogNorm等归一化方法。
  • aspect:控制图像纵横比(aspect ratio)。可以设置为auto或一个数字。
  • interpolation:插值方法。用于控制图像的平滑程度和细节程度。可以选择nearestbilinearbicubic等插值方法。
  • alpha:图像透明度。取值范围为0~1。
  • origin:坐标轴原点的位置。可以设置为upperlower
  • extent:控制显示的数据范围。可以设置为[xmin, xmax, ymin, ymax]
  • vminvmax:控制颜色映射的值域范围。
  • filternorm 和 filterrad:用于图像滤波的对象。可以设置为Noneantigrainfreetype等。
  • imlim: 用于指定图像显示范围。
  • resample:用于指定图像重采样方式。
  • url:用于指定图像链接。

显示灰度图像

import matplotlib.pyplot as plt
import numpy as np

# 生成一个二维随机数组
img = np.random.rand(10, 10)

# 绘制灰度图像
plt.imshow(img, cmap='gray')

# 显示图像
plt.show()

显示彩色图像

# 生成一个随机的彩色图像
img = np.random.rand(10, 10, 3)

# 绘制彩色图像
plt.imshow(img)

显示热力图

# 生成一个二维随机数组
data = np.random.rand(10, 10)

# 绘制热力图
plt.imshow(data, cmap='hot')

# 显示图像
plt.colorbar()
plt.show()

显示地图

import matplotlib.pyplot as plt
import numpy as np
from PIL import Image# 加载地图图像, 下载地址:https://static.runoob.com/images/demo/map.jpeg
img = Image.open('map.jpg')# 转换为数组
data = np.array(img)# 绘制地图
plt.imshow(data)# 隐藏坐标轴
plt.axis('off')# 显示图像
plt.show()

显示矩阵

# 生成一个随机矩阵
data = np.random.rand(10, 10)

# 绘制矩阵
plt.imshow(data)

Matplotlib imsave() 方法

imsave() 方法是 Matplotlib 库中用于将图像数据保存到磁盘上的函数。

通过 imsave() 方法我们可以轻松将生成的图像保存到我们指定的目录中。

imsave() 方法保存图片支持多种图像格式,例如 PNG、JPEG、BMP 等。

imsave() 方法的语法如下:

matplotlib.pyplot.imsave(fname, arr, **kwargs)

参数说明:

  • fname:保存图像的文件名,可以是相对路径或绝对路径。
  • arr:表示图像的NumPy数组。
  • kwargs:可选参数,用于指定保存的图像格式以及图像质量等参数。

import matplotlib.pyplot as plt
import numpy as np

# 创建一个二维的图像数据
img_data = np.random.random((100, 100))

# 显示图像
plt.imshow(img_data)

# 保存图像到磁盘上
plt.imsave('runoob-test.png', img_data)

在保存灰度图像时,我们使用了 cmap 参数将其保存为灰度图像格式。

在保存彩色图像时,我们没有指定图像格式,Matplotlib 库默认将其保存为 JPEG 格式的文件。

Matplotlib imread() 方法

imread() 方法是 Matplotlib 库中的一个函数,用于从图像文件中读取图像数据。

imread() 方法返回一个 numpy.ndarray 对象,其形状是 (nrows, ncols, nchannels),表示读取的图像的行数、列数和通道数:

  • 如果图像是灰度图像,则 nchannels 为 1。
  • 如果是彩色图像,则 nchannels 为 3 或 4,分别表示红、绿、蓝三个颜色通道和一个 alpha 通道。

imread() 方法的语法如下:

matplotlib.pyplot.imread(fname, format=None)

参数说明:

  • fname:指定了要读取的图像文件的文件名或文件路径,可以是相对路径或绝对路径。
  • format :参数指定了图像文件的格式,如果不指定,则默认根据文件后缀名来自动识别格式。

以下实例演示了如何使用 imread 函数从一张图像文件中读取图像数据,并将其显示出来:

import matplotlib.pyplot as plt

# 读取图像文件,下载地址:https://static.runoob.com/images/demo/map.jpeg
img = plt.imread('map.jpeg')

# 显示图像
plt.imshow(img)
plt.show()

我们可以通过更改 numpy 数组来修改图像。

例如,如果我们将数组乘以一个数 0≤≤1,我们将图像变暗:

import matplotlib.pyplot as plt

# 读取图像文件,下载地址:https://static.runoob.com/images/mix/tiger.jpeg
img_array = plt.imread('tiger.jpeg')
tiger = img_array/255
#print(tiger)
# 显示图像
plt.figure(figsize=(10,6))
for i in range(1,5):
    plt.subplot(2,2,i)
    x = 1 - 0.2*(i-1)
    plt.axis('off') #hide coordinate axes
    plt.title('x={:.1f}'.format(x))
    plt.imshow(tiger*x)
plt.show()

以下实例用于裁剪图像:

import matplotlib.pyplot as plt

# 读取图像文件,下载地址:https://static.runoob.com/images/mix/tiger.jpeg
img_array = plt.imread('tiger.jpeg')
tiger = img_array/255
#print(tiger)

# 显示图像
plt.figure(figsize=(6,6))
plt.imshow(tiger[:300,100:400,:])
plt.axis('off')
plt.show()

如果我们将 RGB 颜色的绿色和蓝色坐标的数组元素设置为 0,我们将得到红色的图像:

import matplotlib.pyplot as plt

# 读取图像文件,下载地址:https://static.runoob.com/images/mix/tiger.jpeg
img_array = plt.imread('tiger.jpeg')
tiger = img_array/255
#print(tiger)

# 显示图像
red_tiger = tiger.copy()

red_tiger[:, :,[1,2]] = 0

plt.figure(figsize=(10,10))
plt.imshow(red_tiger)
plt.axis('off')
plt.show()

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【GEE】8、Google 地球引擎中的时间序列分析【时间序列】

1简介 在本模块中&#xff0c;我们将讨论以下概念&#xff1a; 处理海洋的遥感图像。 从图像时间序列创建视频。 GEE 中的时间序列分析。 向图形用户界面添加基本元素。 2背景 深水地平线漏油事件被认为是有史以来最大的海上意外漏油事件。该井释放了超过 490 万桶石油&am…

JAVA自己写什么功能可以提升技术?

JAVA自己写什么功能可以提升技术&#xff1f; 对于技术提升这个话题&#xff0c;勤于练习&#xff0c;多敲多积累这是一个必经的过程。那我们展开来详细的说一说&#xff0c;比如&#xff1a; 实现各种数据结构和算法&#xff0c;比如链表、树、图、排序、搜索等。这可以提高…

MAC设备(M1)环境下编译安装openCV for Java

最近发现一个需求&#xff0c;可以用openCV来实现&#xff0c;碰巧又新买了mac笔记本&#xff0c;就打算利用业余时间安装下openCV。这里将主要步骤记录下&#xff0c;希望能帮助有需要的人。 1、准备编译环境 #查询编译opencv相关依赖 brew info opencv查询结果如下图所示&a…

Blocking waiting for file lock on the registry index 问题解决

问题表现&#xff1a; cargo build时一直卡在Blocking waiting for file lock on the registry index。 解决方法&#xff1a; 1、之前在linux下出现过一次&#xff0c;采用这种方法解决了&#xff1a;rust - Cargo build hangs with " Blocking waiting for file lock…

虚拟展厅如何在艺术领域应用,虚拟展厅对艺术展有什么帮助

引言&#xff1a; 随着科技的不断发展&#xff0c;虚拟展厅作为一种新的展示方式&#xff0c;在艺术领域逐渐受到重视和应用。虚拟展厅利用虚拟现实技术&#xff0c;将艺术品展示于虚拟空间中&#xff0c;为观众带来更加身临其境的艺术体验。 一、虚拟展厅在艺术领域的应用 1…

批量迁移redis实例的key

我们知道migrate 命令可以迁移redis的多个key&#xff0c;但是如果redis的key有非常多&#xff0c;那用起来就很不方便了。 所以下面分享一个脚本来实现批量key的迁移&#xff0c;主要使用的命令为dump和restore 脚本如下&#xff1a; #!/bin/bash redis-cli -h host1 -p 63…

防止砍单、封号:亚马逊、沃尔玛测评方案优化建议

许多卖家和工作室的朋友们向我咨询&#xff0c;为何他们在测评过程中常常遇到砍单和封号的问题。事实上&#xff0c;这个问题并不难理解。测评所涉及到的技术问题非常复杂&#xff0c;仅仅解决IP或环境单一因素是无法实现稳定的测评的。 目前市场上存在许多技术方案&#xff0c…

工业路由器网关的网络协议之NAT技术

在物联网通讯领域&#xff0c;NAT技术能将内网的一个私有IP转换成一个公网IP去接入互联网&#xff0c;解决组建局域网络时私有IP地址无法在公网上进行路由的问题。 NAT&#xff08;Network Address Translation&#xff09;的三种方式&#xff1a; 静态NAT 1、一个私有IP对应…

9 网关的作用

1、总结&#xff1a; 1.如果离开本局域网&#xff0c;就需要经过网关&#xff0c;网关是路由器的一个网口。 2.路由器是一个三层设备&#xff0c;里面有如何寻找下一跳的规则 3.经过路由器之后 MAC 头要变&#xff0c;如果 IP 不变&#xff0c;相当于不换护照的欧洲旅游&#…

【STM32 PWM输出+串口调整PWM周期和占空比】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、PWM是什么&#xff1f;1. PWM 图解二、认识STM32的PWM功能1.哪些定时器有PWM输出功能1.1 高级定时器&#xff0c;7路PWM输出&#xff0c;3组是互补输出&…

第十八章:Swing自述

18.1 Swing概述 18.2&#xff1a;Swing常用窗体 18.2.1&#xff1a;JFrame窗体 package eightth; import java.awt.*; //导入AWT包 import javax.swing.*; //导入Swing包 public class JFreamTest { public static void main(String args[]) { // 主方法 JFra…

一种libuv实现websockets服务的解决方案

方法是libuv用多事件循环来驱动。说起来容易&#xff0c;做起来还是比下面的方法更容易&#xff1a; 上图是某位网友的方法代表子大部分网络资料。此方法对部署不友好&#xff0c;因为软件仓库提供的libwebsockets是不能用了。如何简化部署&#xff0c;利用好现有的软件仓库呢&…

竞赛选题 深度学习手势识别算法实现 - opencv python

文章目录 1 前言2 项目背景3 任务描述4 环境搭配5 项目实现5.1 准备数据5.2 构建网络5.3 开始训练5.4 模型评估 6 识别效果7 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习手势识别算法实现 - opencv python 该项目较为新颖…

京东数据分析:2023年9月京东打印机行业品牌销售排行榜

鲸参谋监测的京东平台9月份打印机市场销售数据已出炉&#xff01; 鲸参谋数据显示&#xff0c;今年9月&#xff0c;京东平台打印机的销量为60万&#xff0c;环比增长约32%&#xff0c;同比下滑约25%&#xff1b;销售额为5亿&#xff0c;环比增长约35%&#xff0c;同比下滑约29%…

Microsoft Dynamics 365 CE 扩展定制 - 7. 安全

在本章中,我们将介绍以下内容: 构建累积安全角色配置业务单元层次结构基于分层位置配置访问配置和分配字段级安全组建团队并共享设置访问团队对静止数据进行加密以满足FIPS 140-2标准管理Dynamics 365在线SQLTDE加密密钥简介 Dynamics 365是一个强大的平台,具有超过10年的良…

小程序如何设置自取模式下的服务方式

设置自取模式下的服务方式是非常重要的&#xff0c;尤其是对于到店自取和到店堂食这两种不同的服务模式。下面我们就来介绍一下如何在小程序中设置这两种服务方式。 在小程序管理员后台->配送设置处&#xff0c;在服务方式处&#xff0c;设置自取情况下的服务方式。默认是&…

MSR015/MSR025低温漂、低功耗电压基准

MSR015/MSR025 是低温漂、低功耗、高精度 CMOS 电压基准&#xff0c; 具有 0.05% 初始精度、低功耗特点。该器件的低输出电压迟滞和低长期输出电压 漂移特性&#xff0c;进一步提高稳定性和系统可靠性。 此外&#xff0c;器件的小尺寸和低运行 电流特性使其非常适合便携…

微信小程序案例3-1 比较数字

文章目录 一、运行效果二、知识储备&#xff08;一&#xff09;Page()函数&#xff08;二&#xff09;数据绑定&#xff08;三&#xff09;事件绑定&#xff08;四&#xff09;事件对象&#xff08;五&#xff09;this关键字&#xff08;六&#xff09;setData()方法&#xff0…

DocTemplateTool - 可根据模板生成word或pdf文件的工具

你是否经常遇到这样的场景&#xff1a;产品运营有着大量的报告需求&#xff0c;或者给客户领导展现每周的运营报告&#xff1f;这些文档类的任务可以交给运营同事&#xff0c;他们负责文档排版和样式&#xff0c;你作为开发人员你只需要提供数据源&#xff0c;和一个映射表&…

数据结构(c语言版) 栈

顺序栈 要求&#xff1a;实现顺序栈的入栈&#xff0c;出栈&#xff0c;显示栈 代码 #include <stdio.h> #define MAXSIZE 100struct liststack{int data[MAXSIZE];int top; };//初始化栈 void init(struct liststack * LS){LS->top -1; }//入栈操作 void instack…