3

我正在使用 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() 
4

1 回答 1

3

这有点骇人听闻,但是...

显然,在当前版本中,Matplotlib 不支持轮廓上的 zorder。然而,这种支持最近被添加到了 trunk中。

所以,正确的做法是要么等待 1.0 版本发布,要么直接从主干重新安装。

现在,这是骇人听闻的部分。我做了一个快速测试,如果我改变了第 618 行

python/site-packages/matplotlib/contour.py

将 zorder 添加到 collections.LineCollection 调用中,它可以解决您的特定问题。

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

不是正确的做事方式,但可能只是在紧要关头。

同样题外话,如果您接受对先前问题的一些回复,您可能会在这里获得更快的帮助。人们喜欢那些代表点:)

于 2010-03-24T15:53:14.013 回答