两个(双)轴上的线交织zorder

时间:2015-07-01 19:47:21

标签: python matplotlib plot multiple-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)

enter image description here

我已经尝试将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)

1 个答案:

答案 0 :(得分:1)

Axes有自己的zorder作为艺术家。来自axes文档:

  

set_zorder(level)设置艺术家的zorder。较低的艺术家   首先绘制zorder值。

     

ACCEPTS:任何数字

轴内儿童的zorder似乎是合理的,例如线,从属于多轴之间的zorder。而且我认为你的代码就是这样的示范。

鉴于您的目标,您可能必须重新设置第二组数据的y值(例如,红色,此处),将它们交错绘制,然后添加带有刻度标签的浮动脊柱描述红色数据的未重新编号的y值。