当前位置: 首页 > ai >正文

13_pandas可视化_Matplotlib

导入库

import matplotlib.pyplot as plt
import numpy as np

pyplot

Pyplot 是 Matplotlib 的子库,提供了和 MATLAB 类似的绘图 API。Pyplot 是常用的绘图模块,能很方便让用户绘制 2D 图表。

Pyplot 包含一系列绘图函数的相关函数,每个函数会对当前的图像进行一些修改,例如:给图像加上标记,生新的图像,在图像中产生新的绘图区域等等。

些常用的 pyplot 函数:

  • plot() :用于绘制线图和散点图
  • scatter():用于绘制散点图
  • bar():用于绘制垂直条形图和水平条形图
  • hist():用于绘制直方图
  • pie():用于绘制饼图
  • imshow():用于绘制图像
  • subplots():用于创建子图

基本语法

用于画图它可以绘制点和线,语法格式如下:

# 画单条线
plot([x], y, [fmt], *, data=None, **kwargs)
# 画多条线
plot([x], y, [fmt], [x2], y2, [fmt2], ..., **kwargs)
  • **x, y:**点或线的节点,x 为 x 轴数据,y 为 y 轴数据,数据可以列表或数组。
  • **fmt:**可选,定义基本格式(如颜色、标记和线条样式)。
  • **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’ 倒三角标记,‘^’ 上三角标记,‘>’ 右三角标记,‘<’ 左三角标记…等等。
x = np.arange(0,4*np.pi,0.1)   # start,stop,step
y = np.sin(x)
z = np.cos(x)
plt.plot(x,y,x,z) # 绘制多条线
# plt.plot(x,y,'+',x,z,'o') # 指定fmt样式
plt.show()

点标记

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

plt.plot(x,y,marker='o')

maker的定义可以取:“.”,“,”,“o”,“v”,“^”,“<”,“>”,“+”,“x”,“X”,“D”,“d”,“|”,"_"等符号。

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

fmt = '[marker][line][color]'
# o:r,o 表示实心圆标记,: 表示虚线,r 表示颜色为红色。
plt.plot(x,y,'o:r')

标记大小与颜色

  • markersize,简写为 ms:定义标记的大小。
  • markerfacecolor,简写为 mfc:定义标记内部的颜色。
  • markeredgecolor,简写为 mec:定义标记边框的颜色。
ypoints = np.array([6, 2, 13, 10])
plt.plot(ypoints, marker = 'o', ms = 20, mec = 'r',mfc='g')

线样式

线的类型可以使用 linestyle 参数来定义,简写为 ls

类型简写说明
‘solid’(默认)‘-’实线
‘dotted’‘:’点虚线
‘dashed’‘–’破折线
‘dashdot’‘-.’点划线
‘None’‘’ 或 ’ ’不画线
ypoints = np.array([6, 2, 13, 10])
plt.plot(ypoints, ls = '-.')
plt.plot(ypoints, linestyle = 'dotted')

线的颜色可以使用 color 参数来定义,简写为 c

plt.plot(ypoints, color = 'r')
plt.plot(ypoints, c = '#8FBC8F') # 自定义颜色

linewidth 参数来定义,简写为 lw,值可以是浮点数

plt.plot(ypoints, linewidth = '12.5')
plt.plot(ypoints, lw = '12.5') # 同上

plot() 方法中可以包含多对 x,y 值来绘制多条线。

y1 = np.array([3, 7, 5, 9])
y2 = np.array([6, 2, 13, 10])plt.plot(y1)
plt.plot(y2)

标签、标题、图例

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

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

可以使用 title() 方法来设置标题

plt.plot(x, y)
plt.title("RUNOOB TEST TITLE")

中文支持,先查找系统中的字体库

import matplotlib
a=sorted([f.name for f in matplotlib.font_manager.fontManager.ttflist])for i in a:print(i)

找出一个支持中文的字体

plt.rcParams['font.family']=['FangSong_GB2312']x = np.arange(1,11) 
y =  2  * x +  5 
plt.title("菜鸟教程 - 测试") 
plt.xlabel("x 轴")
plt.ylabel("y 轴")
plt.plot(x,y) 

标题与标签的定位:

title()、xlabel()、方法都提供了 loc 参数来设置显示的位置,可以设置为: ‘left’, ‘right’, 和 ‘center’, 默认值为 ‘center’

ylabel() 提供了 loc 参数显示的位置,可以设置为: ‘bottom’, ‘top’, 和 ‘center’, 默认值为 ‘center’

调用 plt.legend() 可以显示图例(需要设置绘制数据的label,绘制多条线是才有意义)

data1 = np.random.normal(0, 1, 100)
data2 = np.random.normal(2, 1, 100)
data3 = np.random.normal(-2, 1, 100)# 绘制直方图
plt.plot(data1, label='Data 1')
plt.plot(data2, label='Data 2')
plt.plot(data3, label='Data 3')plt.legend()

网格线

可以使用 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,分别表示网格线的颜色,样式和宽度。
plt.plot(x, y)
plt.grid() # 显示网格
plt.grid(axis='x') # 设置 y 就在轴方向显示网格线

网格样式参数:(前面的线样式、参数缩写同样适用于grid)

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

  • linestyle:‘‐’ 实线,‘‐‐’ 破折线,‘‐.’ 点划线,‘:’ 虚线。

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

plt.plot(x,y) 
plt.grid(c='r',ls='--',lw='0.5')

绘图大小设置

plt.figure(figsize=(10,6))# w,h

设置X、Y轴的范围

通过函数 xlim()、ylim()设置坐标范围

plt.xlim(min,max)
plt.ylim(min,max)

xticks/yticks

设置坐标轴显示

labs = ['a','b','c','d','e','f','g','h','i','g']
plt.xticks(np.arange(len(labs)),labels=labs)
plt.yticks(np.arange(len(labs)),labels=labs)

多图绘制

subplot

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

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

函数将整个绘图区域分成 nrows 行和 ncols 列,然后从左到右,从上到下的顺序对每个子区域进行编号(从1开始)。

子图绘制完成后,可以通过suptitle()函数设置大标题

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("Subplot Test")# index = 1, 表示的坐标为(1, 1), 即第一行第一列的子图。
# index = 2, 表示的坐标为(1, 2), 即第一行第二列的子图。

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() 函数。
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)

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:其他参数。
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])
colors = np.array(["red","green","black","orange","purple","beige","cyan","magenta"])
plt.scatter(x, y,s=sizes,c=colors)

绘制两组散点图

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')

colormap/colorbar

设置颜色条需要使用 cmap 参数,默认值为 ‘viridis’,之后颜色值设置为 0 到 100 的数组,只有 c 是一个浮点数数组的时才使用。

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

colors = np.array([0, 10, 20, 30, 40, 45, 50, 55])
plt.scatter(x,y,s=sizes,cmap='tab10_r',c=colors)
plt.colorbar()

查看cmap 取值范围

','.join(plt.colormaps())

bar/h

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

matplotlib.pyplot.bar[h](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::其他参数。
x = np.array(["Runoob-1", "Runoob-2", "Runoob-3", "C-RUNOOB"])
y = np.array([12, 22, 6, 18])
plt.bar(x,y) # 垂直显示plt.barh(x,y) # 水平显示plt.bar(x, y,  color = ["#4CAF50","red","hotpink","#556B2F"]) # 指定颜色

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)

参数说明:

  • 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:一个包含自动生成的文本标签对象的列表。
x = np.array([35, 25, 25, 15])plt.pie(x,labels=['A','B','C','D'], # 设置饼图标签colors=["#d5695d", "#5d8ca8", "#65a479", "#a564c9"], # 设置饼图颜色explode=(0, 0.2, 0, 0), # 第二部分突出显示,值越大,距离中心越远autopct='%.2f%%', # 格式化输出百分比)
plt.title("RUNOOB Pie Test")

hist

hist() 方法是 Matplotlib 库中的 pyplot 子库中的一种用于绘制直方图的函数。

hist() 方法可以用于可视化数据的分布情况,例如观察数据的中心趋势、偏态和异常值等。

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:表示要绘制直方图的数据,可以是一个一维数组或列表。
  • bin:可选参数,表示直方图的箱数。默认为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:可选参数,表示其他绘图参数。
# 生成一组随机数据
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')

绘制多个图

# 生成三组随机数据
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()

结合pandas

import pandas as pd# 使用 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')
# 生成随机数据
data = pd.Series(np.random.normal(size=100))# 绘制直方图
# bins 参数指定了直方图中的柱子数量
plt.hist(data, bins=10)# 设置图形标题和坐标轴标签
plt.title('RUNOOB hist() Tes')
plt.xlabel('X-Values')
plt.ylabel('Y-Values')

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]
  • vmin、vmax:控制颜色映射的值域范围。
  • filternorm和filterrad:用于图像滤波的对象。可以设置为Noneantigrainfreetype等。
  • imlim: 用于指定图像显示范围。
  • resample:用于指定图像重采样方式。
  • url:用于指定图像链接。
# 生成一个二维随机数组
img = np.random.rand(10,10)
plt.imshow(img,cmap='gray') # 绘制灰度图像# 生成一个随机的彩色图像
img = np.random.rand(10, 10, 3)
plt.imshow(img)

显示热力图

# 生成一个二维随机数组
data = np.random.rand(10, 10)
# 绘制热力图
plt.imshow(data, cmap='hot')
labs = ['a','b','c','d','e','f','g','h','i','g']
plt.xticks(np.arange(len(labs)),labels=labs)
plt.yticks(np.arange(len(labs)),labels=labs)
# 显示图像
plt.colorbar()

显示图片

借助PIL库

from PIL import Imageimg = Image.open(r'..\seaborn-data\map.jpeg')
data = np.array(img)
plt.imshow(data)
# 隐藏坐标轴
plt.axis('off')

直接只使用imread()

img = plt.imread(r'..\seaborn-data\map.jpeg')
plt.imshow(img)

3D

绘制3D图像,需要用到Axes3D对象,二创建Axes3D对象的方式有两种:

直接导入Axes3D库

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as npdef f(x, y):return (1 - y**5 + x**5)*np.exp(-x**2-y**2)fig = plt.figure()
ax = Axes3D(fig)
X = np.arange(-2, 2, 0.1)
Y = np.arange(-2, 2, 0.1)
X, Y = np.meshgrid(X, Y)
ax.plot_surface(X, Y, f(X,Y), rstride=1, cstride=1)	
fig.add_axes(ax)# 缺失这一步会导致图像显示不出来		

通过projection='3d’来绘制

import matplotlib.pyplot as plt
import numpy as npdef f(x, y):return (1 - y**5 + x**5)*np.exp(-x**2-y**2)fig = plt.figure()
ax = fig.add_subplot(projection='3d')
X = np.arange(-2, 2, 0.1)
Y = np.arange(-2, 2, 0.1)
X, Y = np.meshgrid(X, Y)
ax.plot_surface(X, Y, f(X,Y), rstride=1, cstride=1)		

绘制3D线图(plot)

fig = plt.figure()
ax3d = fig.add_subplot(projection='3d')
theta = np.linspace(-2 * np.pi, 2 * np.pi, 100)
x = np.sin(theta)
y = np.cos(theta)
z = np.linspace(-2, 2, 100)
ax3d.plot(x,y,z) 
# ax3d.plot3D(x,y,z) # 同上

通过zdir参数可以设置绘制线的那个平面上

  • ax3d.plot(x,y,zdir=‘z’):在z=0的xy平面绘制曲线
  • ax3d.plot(x,y,2,zdir=‘z’):在z=2的xy平面绘制曲线
  • ax3d.plot(y,z,zdir=‘x’):在x=0的yz平面绘制曲线。zdir也可以为’y’
  • ax3d.plot(y,z,2,zdir=‘x’):在x=2的yz平面绘制曲线
fig = plt.figure()
ax3d = fig.add_subplot(projection='3d')ax3d.plot(x,y,z)           #绘制3d螺旋线
ax3d.plot(x,y,zdir='z')    #绘制x,y平面图形
ax3d.plot(x,y,2,zdir='z')  #绘制x,y平面图形指定高度z为2
ax3d.plot(y,z,zdir='x')    #绘制y,z平面图
ax3d.plot(y,z,-2,zdir='x') #绘制y,z平面图,指定x坐标值为-2

绘制3D散点图(scatter)

与plt.scatter的参数基本一致,但是不支持fmt

fig = plt.figure()
ax3d = fig.add_subplot(projection='3d')x = np.random.randn(50)
y = np.random.randn(50)
z = np.random.randn(50)
s = np.random.randn(50)*100ax3d.scatter(x,y,z,s=s,c=s)  #绘制3d散点图
ax3d.scatter(x,y,-3,zdir='z',c='r') #3d坐标系绘制平面散点

绘制3D曲面图(plot_surface/plot_wireframe)

fig = plt.figure()
ax3d = fig.add_subplot(projection='3d')
x,y=np.mgrid[-3:3:0.2,-3:3:0.2]
z = x*np.exp(-x**2-y**2)
ax3d.plot_surface(x,y,z)

绘制3D柱状图(bar3d)

x = [1, 1, 2, 2]
y = [1, 2, 1, 2]
z = [0, 0, 0, 0]
dx = np.ones_like(x)*0.5
dy = np.ones_like(x)*0.5
dz = [2, 3, 1, 4]
fig, ax = plt.subplots(subplot_kw={"projection": "3d"})
ax.bar3d(x, y, z, dx, dy, dz)ax.set(xticklabels=[],yticklabels=[],zticklabels=[])
http://www.xdnf.cn/news/10886.html

相关文章:

  • Python库 Pympler 详解:内存分析与追踪工具
  • 父文档检索器引和RAG的context precision性能指标
  • docker-compose 方式搭建禅道(最新版)
  • 对接系统外部服务组件技术方案
  • 数据库包括哪些?关系型数据库是什么意思?
  • Percona Toolkit利器pt-config-diff:MySQL配置差异分析与实战指南
  • 【ROS2】各种相关概念汇总解释
  • 条形进度条
  • 【分层图 最短路 迪氏堆优化最短路】B4165 [BCSP-X 2024 12 月初中组] 贸易|普及+
  • SAP 自动编号的使用
  • 19-项目部署(Linux)
  • 爱普生Epson L3210打印机信息
  • 数据库OCP专业认证培训
  • 嵌入式笔试题+面试题
  • 佰力博科技与您探讨低温介电温谱测试仪的应用领域
  • 安全月报 | 傲盾DDoS攻击防御2025年5月简报
  • Python编程基础(四) | if语句
  • while和do-while循环
  • Office文档图片批量导出工具
  • 30天速通C++(九):深入理解deque
  • CppCon 2014 学习:Anatomy of a Smart Pointer
  • 格恩朗气体涡轮流量计 工业精准流量管理的卓越之选
  • Asp.net core 使用EntityFrame Work
  • 核心机制:流量控制
  • ADC模数转换控制
  • RTOS,其基本概念、定义、性质、定理
  • GM DC Monitor如何实现TCP端口状态监控-操作分享
  • RK3568-快速部署codesys runtime
  • VUE3使用jessibuca播放器
  • LeetCode hot100-11