簡體   English   中英

Matplotlib:將兩個 y 軸圍繞零對齊

[英]Matplotlib: Aligning two y-axis around zero

我有一個共享 x 軸上有兩個 y 軸的圖,我想讓它們在 y=0 處對齊,以便我可以繪制一條水平線來突出顯示零刻度。 目前兩個軸沒有對齊,我必須畫兩條線,這很糟糕。 我怎樣才能做到這一點?

在此處輸入圖片說明

我有一個在共享x軸上有兩個y軸的圖,我想使它們在y = 0處對齊,以便我可以畫一條水平線以突出顯示零刻度。 當前兩個軸未對齊,我必須繪制兩條直線,這很糟糕。 我怎樣才能做到這一點?

在此處輸入圖片說明

我有一個在共享x軸上有兩個y軸的圖,我想使它們在y = 0處對齊,以便我可以畫一條水平線以突出顯示零刻度。 當前兩個軸未對齊,我必須繪制兩條直線,這很糟糕。 我怎樣才能做到這一點?

在此處輸入圖片說明

我有一個在共享x軸上有兩個y軸的圖,我想使它們在y = 0處對齊,以便我可以畫一條水平線以突出顯示零刻度。 當前兩個軸未對齊,我必須繪制兩條直線,這很糟糕。 我怎樣才能做到這一點?

在此處輸入圖片說明

這是另一種方式,我認為它更通用。

import numpy as np
%matplotlib inline
import matplotlib.pyplot as plt

def align_zeros(axes):

    ylims_current = {}   #  Current ylims
    ylims_mod     = {}   #  Modified ylims
    deltas        = {}   #  ymax - ymin for ylims_current
    ratios        = {}   #  ratio of the zero point within deltas

    for ax in axes:
        ylims_current[ax] = list(ax.get_ylim())
                        # Need to convert a tuple to a list to manipulate elements.
        deltas[ax]        = ylims_current[ax][1] - ylims_current[ax][0]
        ratios[ax]        = -ylims_current[ax][0]/deltas[ax]
    
    for ax in axes:      # Loop through all axes to ensure each ax fits in others.
        ylims_mod[ax]     = [np.nan,np.nan]   # Construct a blank list
        ylims_mod[ax][1]  = max(deltas[ax] * (1-np.array(list(ratios.values()))))
                        # Choose the max value among (delta for ax)*(1-ratios),
                        # and apply it to ymax for ax
        ylims_mod[ax][0]  = min(-deltas[ax] * np.array(list(ratios.values())))
                        # Do the same for ymin
        ax.set_ylim(tuple(ylims_mod[ax]))

x = np.array(range(1,11))
y1 = 5*x-10
y2 = -10*x+5

fig = plt.figure()
ax1 = fig.add_subplot(111)

ax1.plot(x,y1,'r',label='y1')
ax1.set_ylabel('y1')

ax2 = ax1.twinx()
ax2.plot(x,y2,'g',label='y2')
ax2.set_ylabel('y2')

align_zeros([ax1,ax2])

ax1.legend(loc='upper left')
ax2.legend(loc='upper right')

plt.show()

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM