2013-11-22 2 views
4

Я хочу построить кривые с разными по оси Y, которые разделяют одну и ту же ось х. Раньше я использовал функцию twinx, но они отображают их на разных сторонах рисунка. Есть ли способ построить оба из них с левой стороны. Я искал что-то вроде enter image description hereДве оси Y в левой части рисунка

но с обеих сторон на той же стороне. Код для приведенного выше примера: here.

Об одном не отличается, может один построить кривые в некотором определенном порядке, как и г-го порядка не работают twinx

+1

Пожалуйста, введите код примера, чтобы сгенерировать это, ссылки rot – tacaswell

+0

Поскольку это был стандартный пример matplotlib, я поместил ссылку. Мой вопрос тоже был другим, и я поставил фигуру, чтобы было ясно. – imsc

+0

Используйте zorder по осям, а не по линиям. –

ответ

11

Что показано в красном twinx() поведение по умолчанию. Дополнительная модификация в example применяется к тому, что показано зеленым цветом.

Вы можете изменить обе новые оси, похожие на green, но выберите конус позвонка left и примените отрицательное смещение. Таким образом, добавить/изменить пример с:

par1.spines["left"].set_position(("axes", -0.4)) # red one 
par2.spines["left"].set_position(("axes", -0.2)) # green one 

make_patch_spines_invisible(par1) 
make_patch_spines_invisible(par2) 

par1.spines["left"].set_visible(True) 
par1.yaxis.set_label_position('left') 
par1.yaxis.set_ticks_position('left') 

par2.spines["left"].set_visible(True) 
par2.yaxis.set_label_position('left') 
par2.yaxis.set_ticks_position('left') 

enter image description here

The zorder из линий учитывается только в пределах осей (или так кажется?), Так как у вас есть отдельные оси друг на друга , вы должны изменить zorder осей:

host.set_zorder(1) 
par1.set_zorder(2) 
par2.set_zorder(3) 

Обратите внимание, что host имеет белый фон, разместив его на вершине будет скрыть другие строки, если вы установите цвет фона, чтобы быть транс Родитель.

+1

Что представляют собой объекты par1, par2? – spencerlyon2

+3

Это объекты 'axes' и приведены из примера, который показывает imsc: http://matplotlib.org/examples/pylab_examples/multiple_yaxis_with_spines.html Я только показал модификации, возможно, imsc может включать исходный код в его открытие. –

+2

Вы также можете изменить цвет самих шипов: 'host.spines [" left "]. Set_edgecolor (p1.get_color())' и т. Д. – farenorth