Как отформатировать контурные линии из Matplotlib - PullRequest
3 голосов
/ 22 марта 2010

Я работаю над использованием Matplotlib для создания графиков неявных уравнений (например, y ^ x = x ^ y). Большое спасибо за помощь, которую я уже получил, я довольно далеко продвинулся. Я использовал контурную линию для создания сюжета. Моя остающаяся проблема с форматированием линии контура, например, ширины, цвета и особенно zorder, где контур появляется за моими линиями сетки. Они отлично работают при построении стандартной функции, конечно.

import matplotlib.pyplot as plt 
from matplotlib.ticker import MultipleLocator, FormatStrFormatter
import numpy as np 

fig = plt.figure(1) 
ax = fig.add_subplot(111) 

# set up axis 
ax.spines['left'].set_position('zero') 
ax.spines['right'].set_color('none') 
ax.spines['bottom'].set_position('zero') 
ax.spines['top'].set_color('none') 
ax.xaxis.set_ticks_position('bottom') 
ax.yaxis.set_ticks_position('left') 

# setup x and y ranges and precision
x = np.arange(-0.5,5.5,0.01) 
y = np.arange(-0.5,5.5,0.01)

# draw a curve 
line, = ax.plot(x, x**2,zorder=100,linewidth=3,color='red') 

# draw a contour
X,Y=np.meshgrid(x,y)
F=X**Y
G=Y**X
ax.contour(X,Y,(F-G),[0],zorder=100,linewidth=3,color='green')

#set bounds 
ax.set_xbound(-1,7)
ax.set_ybound(-1,7) 

#add gridlines 
ax.xaxis.set_minor_locator(MultipleLocator(0.2)) 
ax.yaxis.set_minor_locator(MultipleLocator(0.2)) 
ax.xaxis.grid(True,'minor',linestyle='-',color='0.8')
ax.yaxis.grid(True,'minor',linestyle='-',color='0.8') 

plt.show() 

1 Ответ

3 голосов
/ 24 марта 2010

Это довольно глупо, но ...

Очевидно, что в текущем выпуске Matplotlib не поддерживает zorder на контурах. Эта поддержка, однако, была недавно добавлена ​​в транк .

Итак, правильный способ сделать это - подождать релиза 1.0 или просто переустановить его из транка.

Теперь вот хакерская часть. Я сделал быстрый тест, и если я изменил строку 618 в

питон / сайт-пакеты / Matplotlib / contour.py

чтобы добавить zorder в коллекцию collection.LineCollection, это решит вашу конкретную проблему.

col = collections.LineCollection(nlist,
   linewidths = width,
   linestyle = lstyle,
   alpha=self.alpha,zorder=100)

Не правильный способ делать вещи, но может просто работать в крайнем случае.

Также не по теме, если вы примете некоторые ответы на свои предыдущие вопросы, вы, вероятно, получите более быструю помощь здесь. Люди любят эти точки репутации:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...