【问题标题】:How to force zero (0) to the center of an axis in matplotlib如何在matplotlib中强制零(0)到轴的中心
【发布时间】:2020-04-05 23:18:34
【问题描述】:

我正在尝试绘制百分比变化数据,并希望将其绘制成 y 轴关于 0 对称。 即 0 在轴的中心。

import matplotlib.pyplot as plt
import pandas as pd
data = pd.DataFrame([1,2,3,4,3,6,7,8], columns=['Data'])
data['PctChange'] = data['Data'].pct_change()
data['PctChange'].plot()

这与How to draw axis in the middle of the figure? 不同。这里的目标不是移动 x 轴,而是更改 y 轴的限制,使零位于中心。特别是以一种与数据相关的编程方式发生变化。

【问题讨论】:

标签: python pandas matplotlib


【解决方案1】:

绘制数据后,找到最小和最大轴值之间的最大绝对值。然后将轴的最小和最大限制设置为该值的负数和正数(分别)。

import matplotlib.pyplot as plt
import pandas as pd
data = pd.DataFrame([1,2,3,4,3,6,7,8], columns=['Data'])
data['PctChange'] = data['Data'].pct_change()
ax = data['PctChange'].plot()

yabs_max = abs(max(ax.get_ylim(), key=abs))
ax.set_ylim(ymin=-yabs_max, ymax=yabs_max)

【讨论】:

    【解决方案2】:

    可以将Gavin's solution 实现为函数:

    import matplotlib.pyplot as plt
    import numpy as np
    
    
    def symmetrize_y_axis(axes):
        y_max = np.abs(axes.get_ylim()).max()
        axes.set_ylim(ymin=-y_max, ymax=y_max)
    
    
    fig, ax = plt.subplots()
    x = np.linspace(0, 20, 100)
    y = np.exp(np.sin(x)) - 1.0
    ax.plot(x, y)
    symmetrize_y_axis(ax)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-16
      • 1970-01-01
      • 2011-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多