簡體   English   中英

兩個(雙)軸上的線交織zorder

[英]interwoven zorder for lines on two (twin) axes

我正在一對雙( twinx )軸上繪制一系列線條。 我可以使用zorder參數控制每個軸的“頂部”哪條線,並且我可以使用Axes.set_zorder()函數設置哪個軸(作為一個整體)在頂部---使所有線都在一個上軸在另一軸上的所有線上方/下方。 有沒有辦法在兩個軸之間交織線?

例如,我希望上圖(使用雙軸)使得堆疊的線條與下圖(不使用雙軸)相同:

import numpy as np
import matplotlib.pyplot as plt

NUM_PNTS = 100
NUM_LINES = 10
scale = np.linspace(1.0,100.0,num=NUM)[::-1]

lines_left  = [ np.random.uniform(low=-scale, high=scale, size=NUM) 
                for ii in xrange(NUM_LINES) ]
lines_right = [ 50.0 + np.random.uniform(low=-scale, high=scale, size=NUM) 
                for ii in xrange(NUM_LINES) ]
fig,ax = plt.subplots(figsize=[12,12], nrows=2)
tw = ax[0].twinx()

for ll,lr in zip(lines_left,lines_right):
    ax[0].plot(ll, c='b', lw=2.0)
    tw.plot(lr, c='r', lw=2.0)

    ax[1].plot(ll, c='b', lw=2.0)
    ax[1].plot(lr, c='r', lw=2.0)

tw.set_ylim(-150,150)
for axis in ax: axis.set_ylim(-150,150)

在此輸入圖像描述

我已經嘗試將zorder設置為間隔,但在不同的軸上它不起作用,即

for ii,(ll,lr) in enumerate(lines_left, lines_right):
    ax[0].plot(ll, c='b', lw=2.0, zorder=2*ii  )
    tw.plot(lr,    c='b', lw=2.0, zorder=2*ii+1)

Axes有自己的zorder作為藝術家。 axes文檔:

set_zorder(level)設置藝術家的zorder。 首先繪制具有較低zorder值的藝術家。

ACCEPTS:任何數字

一個軸(例如線)中的子節點的zorder從屬於多個軸之間的zorder似乎是合理的。 而且我認為你的代碼就是這樣的示范。

鑒於您的目標,您可能必須重新設置第二組數據的y值(例如,紅色,此處),將它們交錯繪制,然后添加一個帶有刻度標簽的浮動脊柱,用於描述未重新設置的y值。紅色數據。

暫無
暫無

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

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