我画的情节看起来如下:
它是使用以下代码创建的:
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
# 1. Plot a figure consisting of 3 separate axes
# ==============================================
plotNames = ['Plot1','Plot2','Plot3']
figure, axisList = plt.subplots(len(plotNames), sharex=True, sharey=True)
tempDF = pd.DataFrame()
tempDF['date'] = pd.date_range('2015-01-01','2015-12-31',freq='D')
tempDF['value'] = np.random.randn(tempDF['date'].size)
tempDF['value2'] = np.random.randn(tempDF['date'].size)
for i in range(len(plotNames)):
axisList[i].plot_date(tempDF['date'],tempDF['value'],'b-',xdate=True)
# 2. Create a new single axis in the figure. This new axis sits over
# the top of the axes drawn previously. Make all the components of
# the new single axis invisibe except for the x and y labels.
big_ax = figure.add_subplot(111)
big_ax.set_axis_bgcolor('none')
big_ax.set_xlabel('Date',fontweight='bold')
big_ax.set_ylabel('Random normal',fontweight='bold')
big_ax.tick_params(labelcolor='none', top='off', bottom='off', left='off', right='off')
big_ax.spines['right'].set_visible(False)
big_ax.spines['top'].set_visible(False)
big_ax.spines['left'].set_visible(False)
big_ax.spines['bottom'].set_visible(False)
# 3. Plot a separate figure
# =========================
figure2,ax2 = plt.subplots()
ax2.plot_date(tempDF['date'],tempDF['value2'],'-',xdate=True,color='green')
ax2.set_xlabel('Date',fontweight='bold')
ax2.set_ylabel('Random normal',fontweight='bold')
# Save plot
# =========
plt.savefig('tempPlot.png',dpi=300)
基本上,绘制整个图片的理由如下:
当使用jupyter-notebook时,绘图显示正如我想要的那样,但是当保存绘图时,该文件仅包含第二个数字。
我的印象是情节可能有多个数字,而且数字可能有多个轴。但是,我怀疑我对绘图,子图,数字和轴之间的差异存在根本性的误解。有人可以解释我做错了什么,并解释如何将整个图像保存到单个文件中。
答案 0 :(得分:2)
Matplotlib没有“情节”。从这个意义上说,
在脚本运行期间,您可以拥有任意数量的数字。调用plt.save()
将保存当前有效的数字,即通过调用plt.gcf()
获得的数字
您可以通过提供图号num
:
plt.figure(num)
plt.savefig("output.png")
或对图形对象fig1
fig1.savefig("output.png")
为了将多个数字保存到一个文件中,可以按照此处详述的方式进行:Python saving multiple figures into one PDF file。 另一种选择是不使用子图创建几个图,而是单个图,
fig = plt.figure()
ax = plt.add_subplot(611)
ax2 = plt.add_subplot(612)
ax3 = plt.add_subplot(613)
ax4 = plt.add_subplot(212)
然后使用
将相应的图形绘制到这些轴上ax.plot(x,y)
或在pandas数据帧df
df.plot(x="column1", y="column2", ax=ax)
第二个选项当然可以使用网格上的子图来推广到任意轴位置。这在matplotlib用户指南Customizing Location of Subplot Using GridSpec中有详细说明。
此外,可以使用fig.add_axes([left, bottom, width, height])
在图中的任何位置定位轴(可以说是一个子图)(其中left, bottom, width, height
在图形坐标中,范围从0到1)。