You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python控制台绘图时标题及坐标轴标签不显示问题求助

问题:Matplotlib在Python控制台中无法显示标题与坐标轴标签

我尝试使用matplotlib绘制不同年龄对应的薪资中位数,代码如下:

from matplotlib import pyplot as plt
dev_x = [x for x in range(25, 36)]
dev_y = [38496, 42000, 46752, 49320, 53200, 56000, 62316, 64928, 67317, 68748, 73752]
plt.plot(dev_x, dev_y)
plt.title("Median salary (USD) by age")
plt.xlabel("Age")
plt.ylabel("Median salary (USD)")
plt.show()

将代码在PyCharm中作为文件运行时一切正常,但在Python控制台中运行时,标题、X轴和Y轴标签均不显示。具体表现为:输入plt.plot(dev_x, dev_y)后图表显示,添加标题和坐标轴标签后会出现仅含元素的空图,且plt.show()无任何作用。请问我哪里操作有误?

原因分析

这是因为Python控制台默认开启了matplotlib的交互模式(Interactive Mode),当你分步输入命令时,执行plt.plot()的瞬间,matplotlib就会立刻渲染并显示图表。之后你调用plt.title()plt.xlabel()这些方法时,实际上是在操作一个新创建的空白Figure对象,而不是已经显示出来的那个图表,所以后续的设置不会生效,最后调用plt.show()自然也看不到任何变化。

解决方法

这里有三种可行的解决方案,你可以根据自己的习惯选择:

1. 一次性执行所有代码

把所有绘图相关的命令复制到控制台中一次性执行,不要分步输入。这样所有的标题、轴标签设置都会在plt.show()之前完成,matplotlib会一次性渲染出完整的图表:

from matplotlib import pyplot as plt
dev_x = [x for x in range(25, 36)]
dev_y = [38496, 42000, 46752, 49320, 53200, 56000, 62316, 64928, 67317, 68748, 73752]
plt.plot(dev_x, dev_y)
plt.title("Median salary (USD) by age")
plt.xlabel("Age")
plt.ylabel("Median salary (USD)")
plt.show()

2. 关闭交互模式后分步操作

先在控制台输入命令关闭交互模式,之后再分步执行绘图命令,最后用plt.show()显示完整图表:

plt.ioff()  # 关闭交互模式

然后依次输入:

dev_x = [x for x in range(25, 36)]
dev_y = [38496, 42000, 46752, 49320, 53200, 56000, 62316, 64928, 67317, 68748, 73752]
plt.plot(dev_x, dev_y)
plt.title("Median salary (USD) by age")
plt.xlabel("Age")
plt.ylabel("Median salary (USD)")
plt.show()  # 此时会显示包含所有元素的完整图表

3. 使用面向对象API(推荐)

这种方式更清晰,显式创建Figure和Axes对象,所有的设置都直接作用于指定的Axes,避免混淆不同的Figure:

from matplotlib import pyplot as plt

fig, ax = plt.subplots()  # 显式创建Figure和Axes
dev_x = [x for x in range(25, 36)]
dev_y = [38496, 42000, 46752, 49320, 53200, 56000, 62316, 64928, 67317, 68748, 73752]

ax.plot(dev_x, dev_y)
ax.set_title("Median salary (USD) by age")
ax.set_xlabel("Age")
ax.set_ylabel("Median salary (USD)")

plt.show()

这种方法不管是在文件中还是交互式控制台里,行为都一致,也更便于复杂图表的扩展。

内容的提问来源于stack exchange,提问作者ptushev

火山引擎 最新活动