【问题标题】:X and Y label being cut in matplotlib plots在 matplotlib 图中切割 X 和 Y 标签
【发布时间】:2020-06-27 19:03:05
【问题描述】:

我有这个代码:

import pandas as pd
from pandas import datetime
from pandas import DataFrame as df
import matplotlib
from pandas_datareader import data as web
import matplotlib.pyplot as plt
import datetime
start = datetime.date(2016,1,1)
end = datetime.date.today()
stock = 'fb'
fig = plt.figure(dpi=1400)
data = web.DataReader(stock, 'yahoo', start, end)
fig, ax = plt.subplots(dpi=720)
data['vol_pct'] = data['Volume'].pct_change()
data.plot(y='vol_pct', ax = plt.gca(), title = 'this is the title \n second line')

ax.set(xlabel="Date")
ax.legend(loc='upper center', bbox_to_anchor=(0.32, -0.22), shadow=True, ncol=2)
plt.savefig('Test')

这是另一个代码的示例,但问题是相同的:

在图的底部,您可以看到图例正在被删除。在我正在处理的另一个不同代码的情节中,当我使用plt.savefig('Test') 保存情节时,即使ylabel 也会被剪切。我该如何解决这个问题?

【问题讨论】:

    标签: python-3.x pandas matplotlib


    【解决方案1】:

    .savefig() 的一个长期问题是它在设置边界之前不检查图例和轴位置。通常,我使用 bbox_inches 参数解决这个问题:

    plt.savefig('Test', bbox_inches='tight')
    

    这类似于调用plt.tight_layout(),但会考虑到所有相关的艺术家,而tight_layout 通常会将一些对象拉入框架,同时切断新的对象。

    我必须告诉 pyplot 在一半以上的时间里保持紧凑,所以我不确定为什么这不是默认行为。

    【讨论】:

    • 它不是默认值,因为人们通常不希望他们的数字改变大小。
    • @JodyKlymak,bbox_inches 会改变图形对象本身的大小吗?
    • 是的,暂时保存图。
    【解决方案2】:

    plt.subplots_adjust(bottom=0.4 ......)

    我觉得这个修改会让你满意。

    或者也许您可以将图例重新定位到 loc="upper left"

    https://matplotlib.org/api/_as_gen/matplotlib.pyplot.subplots_adjust.html

    请也检查一下这个 8 年前提出的问题..

    Moving matplotlib legend outside of the axis makes it cutoff by the figure box

    【讨论】:

      猜你喜欢
      • 2018-08-01
      • 2018-08-23
      • 2018-09-07
      • 2012-03-14
      • 2023-03-30
      • 2023-04-04
      • 1970-01-01
      • 2018-04-05
      • 1970-01-01
      相关资源
      最近更新 更多