楼主: 耕耘使者
13108 2

[问答] matplotlib包中,ax.set_title和plt.title是否等价? [推广有奖]

贵宾

学术权威

39%

还不是VIP/贵宾

-

威望
4
论坛币
1812817 个
通用积分
148.0401
学术水平
109 点
热心指数
173 点
信用等级
87 点
经验
93394 点
帖子
4550
精华
0
在线时间
2845 小时
注册时间
2006-4-6
最后登录
2024-2-24

60论坛币
  1. import matplotlib.pyplot as plt
  2. x=[1,2,3,4,5]
  3. y=[3,6,7,9,2]

  4. fig,ax=plt.subplots(1,1)
  5. ax.plot(x,y,label='trend')
  6. ax.set_title('title test',fontsize=12,color='r') #r: red
  7. plt.show()
复制代码
第二种:
  1. import matplotlib.pyplot as plt
  2. x=[1,2,3,4,5]
  3. y=[3,6,7,9,2]
  4. fig,ax=plt.subplots(1,1)
  5. ax.plot(x,y,label='trend')
  6. plt.title('title test',fontsize=12,color='r') #r: red
  7. plt.show()
复制代码
请问二者是否等价?如果等价,是什么原因?

最佳答案

zhuming1992 查看完整内容

请楼主先搞清楚Python和matplotlib(mpl)的主要两种编程范式:函数式编程和对象式编程,这里我不展开讲。通常的说,plt.XX之类的是函数式绘图,通过将数据参数传入plt类的静态方法中并调用方法,从而绘图。fig,ax=plt.subplots()是对象式编程,这里plt.subplots()是返回一个元组,包含了figure对象(控制总体图形大小)和axes对象(控制绘图,坐标之类的)。进行对象式绘图,首先是要通过plt.subplots()将figure类和axes类实例化也就是代 ...
关键词:Matplotlib matplot Title plot ITL
沙发
zhuming1992 发表于 2019-1-5 12:30:11 |只看作者 |坛友微信交流群
请楼主先搞清楚Python和matplotlib(mpl)的主要两种编程范式:函数式编程和对象式编程,这里我不展开讲。通常的说,plt.XX之类的是函数式绘图,通过将数据参数传入plt类的静态方法中并调用方法,从而绘图。fig,ax=plt.subplots()是对象式编程,这里plt.subplots()是返回一个元组,包含了figure对象(控制总体图形大小)和axes对象(控制绘图,坐标之类的)。进行对象式绘图,首先是要通过plt.subplots()将figure类和axes类实例化也就是代码中的fig,ax,然后通过fig调整整体图片大小,通过ax绘制图形,设置坐标等等。
函数式绘图最大的好处就是直观(我不觉得简单),即使没多少基础,也能一眼看出来,但如果绘制稍微复杂的图像,或者过子图操作,就不如对象式绘图了。
回到楼主的代码,ax.set_title()是给ax这个子图设置标题,当子图存在多个的时候,可以通过ax设置不同的标题
  1. import matplotlib.pyplot as plt
  2. x=[1,2,3,4,5]
  3. y=[3,6,7,9,2]
  4. # 实例化两个子图(1,2)表示1行2列
  5. fig,ax=plt.subplots(1,2)
  6. ax[0].plot(x,y,label='trend')
  7. ax[1].plot(x,y,color='cyan')
  8. ax[0].set_title('title 1')
  9. ax[1].set_title('title 2')
复制代码
ax_subplot.jpg


如果仅仅是调用plt.title()给多个子图上标题,就比较麻烦了
  1. import matplotlib.pyplot as plt
  2. x=[1,2,3,4,5]
  3. y=[3,6,7,9,2]
  4. # fig,ax=plt.subplots(1,2)
  5. plt.figure(1)
  6. plt.subplot(121)# 12表示子图分布:一行2列;最后一个1表示第1个子图,从左往右
  7. plt.plot(x,y,label='trend')
  8. plt.title('title 1',fontsize=12,color='r') #r: red
  9. plt.subplot(122)#第二个子图
  10. plt.plot(x,y,c='cyan')
  11. plt.title('title 2')
复制代码
很明显,同样是绘制两个子图函数式方法就比对象式方法要麻烦很多。
plt_subplot.jpg

如果只是绘制一个图片的话,plt.title()和ax.set_title()没什么区别,只是编程范式不同。

最后,我也看了楼主平时的提问,还是建议楼主先把Python的基础语法学扎实些,再细分到具体领域。像面向对象,函数式编程这些Python的基础语法都有的。
PS. 觉得回答可以就赏个币吧
已有 1 人评分学术水平 热心指数 收起 理由
耕耘使者 + 5 + 5 精彩帖子

总评分: 学术水平 + 5  热心指数 + 5   查看全部评分

使用道具

藤椅
耕耘使者 发表于 2019-1-5 18:27:33 |只看作者 |坛友微信交流群
zhuming1992 发表于 2019-1-5 12:30
请楼主先搞清楚Python和matplotlib(mpl)的主要两种编程范式:函数式编程和对象式编程,这里我不展开讲。通常 ...
多谢前辈指点!

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-25 18:36