python绘图系统27:matplotlib中平面坐标、极坐标和三维坐标的所有绘图函数

文章目录

绘图函数列表

下面整理了几乎所有matplotlib中的绘图函数,及其在不同坐标轴下的表现。

函数 类别 2D polar 3D 备注
imshow 图像 X
pcolormesh 伪彩图 [X,Y,]Z X,Y,Z
plot 曲线图 x[,y] x[,y] x,y[,z]
scatter 散点图 x,y/X,Y x,y x,y,[,z] 可为任意维度
stem 茎叶图 x,y x,y x,y[,z]
step 阶梯图 x,y x,y x,y[,z]
bar 条形图 x,y x,y x,y[,z]
barh 横向条形图 x,y x,y
stackplot 填充线图 x,y x,y
plot_surface 曲面图 x,y,z x,y必须是网格
plot_wireframe 网格图 x,y,z x,y必须是网格
plot_trisurf 三角面图 x,y,z x,y,z是一维数组
errorbar 误差线 x,y xerr,yerr x,y xerr,yerr x,y,z xerr,yerr,zerr
fill_between 纵向区间图 x,y1,y2 x,y1,y2
fill_betweenx 横向区间图 y, x1, x2 x,y1,y2
contour 等高线 [x,y,]z [x,y,]z x,y,z
contourf 填充等高线 [x,y,]z [x,y,]z x,y,z
quiver 向量场图 x,y,u,v x,y,u,v x,y,z,u,v,w
streamplot 流场图 x,y,u,v x,y,u,v
barbs 风场图 x,y,u,v x,y,u,v
hist 直方图 x x x
boxplot 箱线图 x x x
violinplot 小提琴图 x x
enventplot 信封图 x x
hist2d 二维直方图 x,y x,y
hexbin 钻石图 x,y x,y
pie 饼图 x x
tricontour 自由等高线 x,y,z x,y,z x,y,z
tricontourf 自由填充等高线 x,y,z x,y,z x,y,z
tricolor 自由伪彩图 x,y,z
triplot 三角骨架图 x,y

为DrawType添加这些绘图函数

之所以闲得无聊总结matplotlib中的绘图函数,是为了在Python绘图系统中正确第调用它们。

有了这些绘图类别后,首先绘图字典需要更新,这个字典不能做成全局变量,因为其中的ax,其实是作为函数参数传递进来的。

python 复制代码
funcDct = {
    "点线图"  : ax.plot,    "曲线图" : ax.plot, 
    "散点图"  : ax.scatter, 
    "图像"    : ax.imshow,  "伪彩图" : ax.pcolormesh, 
    "条形图"  : ax.bar,     "横向条形图": ax.barh, 
    "茎叶图"  : ax.stem,    "阶梯图": ax.step,
    "填充图"  : ax.stackplot, 
    "误差线"  : ax.errorbar, 
    "区间图"  : ax.fill_between, "横向区间图": ax.fill_betweenx, 
    "曲面图"  : ax.plot_surface, 
    "网格图"  : ax.plot_wireframe,
    "三角面图": ax.plot_trisurf,
    "等高线"  : ax.contour, "填充等高线" : ax.contourf,
    "向量场图": ax.quiver,  "流场图":ax.streamplot,
    "风场图"  : ax.barbs, 
    "直方图"  : ax.hist,    "二维直方图":ax.hist2d,
    "钻石图"  : ax.hexbin,  "信封图"  : ax.enventplot, 
    "箱线图"  : ax.boxplot, "小提琴图":violinplot,
    "饼图"    : ax.pie,
    "自由等高线" : ax.tricontour,
    "自由填充等高线" : ax.tricontourf,
    "自由伪彩图" : ax.tricolor,
    "三角骨架图" : ax.triplot
}

然后据此更新self.TYPES,

python 复制代码
self.TYPES = [
    "点线图", "曲线图", "散点图", "图像", "伪彩图" , 
    "条形图", "横向条形图", "茎叶图", "阶梯图", "填充图", 
    "误差线", "区间图", "横向区间图",  "曲面图",  
    "网格图", "三角面图", "等高线",  "填充等高线",
    "向量场图", "流场图", "风场图",  "直方图", "二维直方图", 
    "钻石图", "信封图", "箱线图", "小提琴图", "饼图", 
    "自由等高线", "自由填充等高线" ,"自由伪彩图" ,"三角骨架图"]

绘图类别跳转坐标系

这些绘图函数建议使用的坐标系如下表

绘图函数 图像类别 建议的坐标
imshow 图像 None
plot_surface 曲面图 3d
plot_wireframe 网格图 3d
plot_trisurf 三角面图 3d
tricontour 自由等高线 None, polar, 3d
plot 曲线图 None, polar, 3d
scatter 散点图 None, polar, 3d
stem 茎叶图 None, polar, 3d
step 阶梯图 None, polar, 3d
bar 条形图 None, polar, 3d
errorbar 误差线 None, polar, 3d
contour 等高线 None, polar, 3d
quiver 向量场图 None, polar, 3d
pcolormesh 伪彩图 None, polar
barh 横向条形图 None, polar
stackplot 填充线图 None, polar
fill_between 区间图 None, polar,
fill_betweenx 横向区间图 None, polar,
streamplot 流场图 None, polar
barbs 风场图 None, polar
violinplot 小提琴图 None, polar
enventplot 信封图 None, polar
hist2d 二维直方图 None, polar
hexbin 钻石图 None, polar
pie 饼图 None, polar
tricolor 自由伪彩图 None, polar
triplot 三角骨架图 None, polar
contourf 填充等高线 None, polar
tricontourf 自由填充等高线 None, polar
hist 直方图 None, polar
boxplot 箱线图 None, polar
tricontour 自由等高线 None, polar, 3d
plot 曲线图 None, polar, 3d
scatter 散点图 None, polar, 3d
stem 茎叶图 None, polar, 3d
step 阶梯图 None, polar, 3d
bar 条形图 None, polar, 3d
errorbar 误差线 None, polar, 3d
contour 等高线 None, polar, 3d
quiver 向量场图 None, polar, 3d

故更改cbTypeChanged函数如下

python 复制代码
def cbTypeChanged(self, evt):
    t = self.drawVars['type'].get()
    p = self.drawVars['proj'].get()
    NO3D = ("曲线图", "散点图", "茎叶图", "条形图", "误差线",
        "等高线", "向量场图", "自由等高线")
    if t in ("图像"):
        self.wDct['proj']['value'] =  ("None")
    elif t in ("曲面图", "网格图", "三角面图"):
        self.wDct['proj']['value'] =  ("3d")
    elif t in NO3D:
        self.wDct['proj']['value'] =  ("None", "3d", "polar")
    else:
        self.wDct['proj']['value'] =  ("None", "polar")
    
    projs = self.wDct['proj']['value']
    if p not in projs:
        self.drawVars['proj'].set(projs[0])        
    self.cbProjChanged(None)

坐标

接下来要为这些绘图函数分类,发现最特殊的是imshow,只支持平面直角坐标;然后是三个三维绘图函数,只支持三维直角坐标,剩下的基本都同时支持平面直角和极坐标。

python 复制代码
def cbTypeChanged(self, evt):
    t = self.drawVars['type'].get()
    p = self.drawVars['proj'].get()
    NO3D = ("曲线图", "散点图", "茎叶图", "条形图", "误差线",
        "等高线", "向量场图", "自由等高线")
    if t in ("图像"):
        self.wDct['proj']['value'] =  ("None")
    elif t in ("曲面图", "网格图", "三角面图"):
        self.wDct['proj']['value'] =  ("3d")
    elif t in NO3D:
        self.wDct['proj']['value'] =  ("None", "3d", "polar")
    else:
        self.wDct['proj']['value'] =  ("None", "polar")
    
    projs = self.wDct['proj']['value']
    if p not in projs:
        self.drawVars['proj'].set(projs[0])        
    self.cbProjChanged(None)

最后,是坐标的变化,直角坐标系下的变化为

python 复制代码
def cbProjNone(self, t):
    if t in ("点线图", "曲线图"):
        self.wDct['dim']['value'] = ('x', 'xy')
    elif t in ("图像", "直方图", "饼图", "箱线图", "小提琴图", "信封图"):
        self.wDct['dim']['value'] = ('x')
    elif t in ("误差线", "向量场图", "流场图", "风场图"):
        self.wDct['dim']['value'] = ('xyuv')
    elif t in ("伪彩图", "等高线", "填充等高线"):
        self.wDct['dim']['value'] = ('x', 'xyz')
    elif t in ("区间图", "横向区间图", "自由等高线", "自由伪彩图", "自由填充等高线"):
        self.wDct['dim']['value'] = ('xyz')
    else:
        self.wDct['dim']['value'] = ('xy')

经过对比发现,极坐标情况下除了没有imshow之外,其他绘图函数的坐标轴的个数与直角坐标基本相同,所以就直接调用cbProjNone了。

python 复制代码
def cbProjPolar(self, t):
    self.cbProjNone(t)

相比之下,三维坐标的情况可能更加简单一些

python 复制代码
def cbProj3d(self, t):
    if t  in ("向量场图", "误差线"):
        self.wDct['dim']['value'] = ('xyzuvw')
    elif t in ("曲线图", "散点图", "茎叶图", "阶梯图", "条形图"):
        self.wDct['dim']['value'] = ('xy', 'xyz')
    else:
        self.wDct['dim']['value'] = ('xyz')

至此,就成功载入了几乎所有matplotlib中的函数。

源代码

Python绘图系统:

相关推荐
m0_748554814 小时前
golang如何实现用户订阅偏好管理_golang用户订阅偏好管理实现总结
jvm·数据库·python
smj2302_796826524 小时前
解决leetcode第3911题.移除子数组元素后第k小偶数
数据结构·python·算法·leetcode
阿正呀5 小时前
Redis怎样实现本地缓存的高效失效通知
jvm·数据库·python
2501_901200535 小时前
mysql如何设置InnoDB引擎参数_优化innodb_buffer_pool
jvm·数据库·python
_.Switch5 小时前
东方财富股票数据JS逆向:secids字段和AES加密实战
开发语言·前端·javascript·网络·爬虫·python·ecmascript
Mr_sst5 小时前
Claude Code 部署与使用保姆级教程(2026 最新)
python·ai
瞎某某Blinder5 小时前
DFT学习记录[6]基于 HES06的能带计算+有效质量计算
python·学习·程序人生·数据挖掘·云计算·学习方法
m0_495496416 小时前
mysql处理复杂SQL性能_InnoDB优化器与MyISAM差异
jvm·数据库·python
forEverPlume7 小时前
PHP怎么使用Eloquent Attribute Composition属性组合_Laravel通过组合构建复杂属性【方法】
jvm·数据库·python
Aleeeeex7 小时前
RAG 那点事:从 8 份企业文档到能用的问答系统,全过程拆给你看
人工智能·python·ai编程