3

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)
4

1 回答 1

1

斧头作为艺术家有自己的 zorder。从axes文档中:

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

接受:任何数字

一个轴内的子级 zorder(例如线)从属于多个轴之间的 zorder 似乎是合理的。而且我认为您的代码证明了这一点。

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

于 2015-07-04T06:03:21.693 回答