【问题标题】:Set margins of a time series plotted with pandas设置用 pandas 绘制的时间序列的边距
【发布时间】:2020-01-16 19:38:13
【问题描述】:

我有以下代码用于生成时间序列图

import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111)
series = pd.Series([np.sin(ii*np.pi) for ii in range(30)],
                   index=pd.date_range(start='2019-01-01', end='2019-12-31',
                                       periods=30))
series.plot(ax=ax)

我想为 x 和 y 设置一个自动限制,我尝试使用 ax.margins() 但它似乎不起作用:

ax.margins(y=0.1, x=0.05)
# even with
# ax.margins(y=0.1, x=5)

我正在寻找的是一种自动方法,例如 padding=0.1(图表周围 10% 的空白)

【问题讨论】:

    标签: python pandas plot


    【解决方案1】:

    当坐标轴有日期时,Pandas 和 matplotlib 在协作时似乎经常被混淆。出于某种原因,在这种情况下,ax.margins 在 x 轴上无法按预期工作。

    这是一个似乎确实可以完成工作的解决方法,明确地移动 xlim:

    xmargins = 0.05
    ymargins = 0.1
    ax.margins(y=ymargins)
    x0, x1 = plt.xlim()
    plt.xlim(x0-xmargins*(x1-x0), x1+xmargins*(x1-x0))
    

    或者,您可以直接使用 matplotlib 的绘图,它可以按预期将边距应用于日期轴。

    ax.plot(series.index, series)
    ax.margins(y=0.1, x=0.05)
    

    PS:This post 谈到将 use_sticky_edges 设置为 False 并在设置边距后调用 autoscale_view,但这似乎在这里不起作用。

    ax.use_sticky_edges = False
    ax.autoscale_view(scaley=True, scalex=True)
    

    【讨论】:

      【解决方案2】:

      您可以使用ax.set_xlimax.set_ylim 分别设置绘图的x 和y 限制。

      import numpy as np
      fig = plt.figure()
      ax = fig.add_subplot(111)
      series = pd.Series([np.sin(ii*np.pi) for ii in range(30)],
                         index=pd.date_range(start='2019-01-01', end='2019-12-31',
                                             periods=30))
      
      # set xlim to be a between certain dates
      ax.set_xlim((pd.to_datetime('2019-01-01'), pd.to_datetime('2019-01-31'))
      
      # set ylim to be between certain values
      ax.set_ylim((-0.5, 0.5))
      
      series.plot(ax=ax)
      
      

      【讨论】:

      • 我正在寻找的是一种自动方法,例如 padding=0.1(图表周围 10% 的空白)
      • 您的解决方案似乎正在为此工作(至少我在 y 轴上可以看到,x 轴似乎不起作用)。
      猜你喜欢
      • 2016-05-07
      • 2016-11-29
      • 2015-11-15
      • 2013-01-30
      • 2020-08-03
      • 1970-01-01
      • 1970-01-01
      • 2012-07-05
      • 2020-04-20
      相关资源
      最近更新 更多