matplotlib错误'362976x273像素的图像大小太大'

时间:2018-09-17 20:24:55

标签: matplotlib

我正在用线形图作为衬砌的区域图绘制在数据框结构的顶部,如下所示:

df = pd.DataFrame({'Date':pd.date_range('2018-1-1', periods=100, freq='D'),'Pre1':np.random.randint(-1000, 1000, 100),
               'Pre2':np.random.randint(-750, 1000, 100)},
              columns=['Date','Pre1','Pre2'])
df=df.set_index('Date')

DatetimeIndex(['2017-01-01', '2017-01-03', '2017-01-04', '2017-01-05',
               '2017-01-06', '2017-01-09', '2017-01-10', '2017-01-11',
               '2017-01-12', '2017-01-13',
               ...
               '2018-08-29', '2018-08-30', '2018-08-31', '2018-09-03',
               '2018-09-04', '2018-09-05', '2018-09-06', '2018-09-07',
               '2018-09-10', '2018-09-11'],
              dtype='datetime64[ns]', name='Date', length=416, freq=None)

我正在使用

plt.figure()
ax3=df.plot(df.index,'Pre1', color="g",linewidth=0.8) #the line
plt.fill_between(df.index,df['Pre1'], facecolor="palegreen", alpha=0.4) # the area
ax3.tick_params(axis="x",direction="in")
ax3.tick_params(axis="y",direction="in")
plt.text(1,100,'Pre')
plt.text(3,-100,'Dis')
plt.ylabel('$')
ax3.legend().set_visible(False)
plt.title('This is a test')
plt.xticks()
ax3.yaxis.grid(True,linestyle='--')
plt.show()

但是,我遇到了以下错误:

ValueError: Image size of 362976x273 pixels is too large. It must be less than 2^16 in each direction.

我尝试重新启动内核以及Jupyter,但是没有运气。还尝试了figsize =(6,8),无法正常工作。有人知道问题出在哪里吗?

1 个答案:

答案 0 :(得分:1)

我认为应该是ax3=df.plot(y='Pre1', color="g",linewidth=0.8)。但这可能与错误无关。

问题来自plt.text行。轴限制在2018年的范围内,因此以数值单位为17500左右。但是,文本放在位置1上。那是2017年前。

由于某些原因(未知或尚未确定的原因),此代码在jupyter中运行时仍将是轴的一部分,并且不会被剪切。这有效地使轴的使用寿命达到了2017年,并最终产生了巨大的数字。有人可能认为这是一个错误。但是即使如此,您可能也不想将文本放置在可以看到的范围之外。因此,您要么希望将文本放置在可见范围内的某些数据坐标处,例如

plt.text(17527,100,'Pre')

或者您想以轴为单位定位它,例如

plt.text(1,1,'Pre', transform=ax3.transAxes)