2015-06-28 69 views
3

使用下面的代码,第一个等高线图有网格线。对于第二个情节,我已经导入了seaborn,但网格线没有显示出来。我需要添加什么来使网格线显示在第二个图上。使用seaborn和contourf,我如何绘制网格线?

import numpy as np 
import matplotlib as mpl 
import matplotlib.pyplot as plt 


dx=0.05 
x=np.arange(0,5+dx,dx) 
y=x 
X,Y = np.meshgrid(x,y) 
Z = np.sin(X)**10+np.cos(10+Y*Y)*np.cos(X) 

nbins=10 
levels=mpl.ticker.MaxNLocator(nbins=nbins).tick_values(Z.min(),Z.max()) 

plt.figure() 
plt.contourf(x,y,Z,levels=levels) 
plt.colorbar() 
plt.grid('on') 

import seaborn as sns 
sns.set_context("notebook") 
sns.set_style("whitegrid") 

plt.figure() 
plt.contourf(x,y,Z,levels=levels) 
plt.colorbar() 
plt.grid('on') 
plt.show() 

First Picture

Second Picture

回答

2

你要么需要改变要么axes.axisbelow RC参数或contourf情节的ZORDER。所以,你可以做

sns.set(context="notebook", style="whitegrid", 
     rc={"axes.axisbelow": False}) 

当您设置的样式或

plt.contourf(x, y, Z, levels=levels, zorder=0) 

当你描绘的情节。

+0

谢谢。作为解释,seaborn是否设置参数,以便网格绘制在实心轮廓图之下,因此网格线变得模糊不清。 “axes.axisbelow”:False将坐标轴和网格线绘制在图的顶部,zorder = 0将等值线图设置为首先绘制在轴和网格线的下方。是对的吗? – pheon

+0

正确的是,seaborn网格绘制在所有数据元素之下,对于大多数情节来说看起来更好,但是正如你发现的,在类似图像的情节中效果不好。 – mwaskom