如何让Matplotlib中DataFrame绘图使用当前坐标轴避免多图
问题解决:避免pandas绘图生成多个图形
问题原因
你遇到的两个图形(一个空白、一个带数据)是因为两次创建了绘图容器:
- 调用
plt.gca()时,若当前无已创建的图形,matplotlib会自动生成一个空白的Figure和Axes对象。 - 随后
df.plot('x', 'y', kind='scatter')默认会新建一个Figure来绘制散点图,最终导致两个图形被生成。
另外注意代码里的拼写错误:matplotlib.pylot应改为matplotlib.pyplot,否则会引发导入错误。
解决方案:指定绘图的Axes对象
让df.plot()在已有的Axes上绘图,而不是新建Figure,有两种实现方式:
方式1:复用plt.gca()获取的Axes
import matplotlib.pyplot as plt import pandas as pd df = pd.read_csv("csvFile.csv") print(df) # 校验数据,查看x、y、lbl列内容 # 获取当前Axes(无则创建) ax = plt.gca() # 指定在已有Axes上绘制散点图 df.plot('x', 'y', kind='scatter', ax=ax) numberOfFigures = plt.getfignums() print(numberOfFigures) # 现在会输出[1],仅一个图形 # 其他填充、图例等代码 plt.show()
方式2:手动创建Figure和Axes(更推荐)
直接创建绘图容器,再传给df.plot(),逻辑更清晰:
import matplotlib.pyplot as plt import pandas as pd df = pd.read_csv("csvFile.csv") print(df) # 手动创建Figure和Axes对象 fig, ax = plt.subplots() # 在指定的Axes上绘图 df.plot('x', 'y', kind='scatter', ax=ax) numberOfFigures = plt.getfignums() print(numberOfFigures) # 输出[1] # 其他代码 plt.show()
内容的提问来源于stack exchange,提问作者James-Jesse Drinkard
相关产品推荐
相关产品推荐

