Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python matplot中的轮廓图显示不正确的线型_Python_Matplotlib_Contour - Fatal编程技术网

Python matplot中的轮廓图显示不正确的线型

Python matplot中的轮廓图显示不正确的线型,python,matplotlib,contour,Python,Matplotlib,Contour,我正在使用轮廓图在matplotlib中绘制一个二维矩阵,它有正值和负值。它应该为正值显示实线,为负值显示虚线: loc = matplotlib.ticker.MaxNLocator(20) Z = psi lvls = loc.tick_values(Z.min(), Z.max()) fig, ax = plt.subplots(figsize=(7,7)) cp = plt.contour(X, Y, Z, 20, colors='k', linestyles=where(lvls &g

我正在使用轮廓图在matplotlib中绘制一个二维矩阵,它有正值和负值。它应该为正值显示实线,为负值显示虚线:

loc = matplotlib.ticker.MaxNLocator(20)
Z = psi
lvls = loc.tick_values(Z.min(), Z.max())
fig, ax = plt.subplots(figsize=(7,7))
cp = plt.contour(X, Y, Z, 20, colors='k', linestyles=where(lvls >= 0, "-", "--"))
plt.xlabel('X')
plt.ylabel('Y')
plt.clabel(cp, inline=True, fontsize=10)
plt.gca().set_aspect('equal', adjustable='box')
plt.title('Stream function - Re = ' + str(Re) + ', t = {:.2f}'.format((t)*dt))
plt.savefig('SF' + '_Re' + str(Re) + '_N' + str(nx) + '_o' + str(order) + '_SF' + '.png')
plt.close()
但是,这是此代码正在绘制的内容:

如您所见,虚线应该显示实线,实线应该显示虚线。有什么想法吗

编辑:下面的代码工作正常:

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

nx = 100
ny = 100

# Generate 2D mesh
x = 2*np.pi*np.arange(0,nx,1)/(nx)
#x = linspace(0,Lx,nx,endpoint=True)
y = 2*np.pi*np.arange(0,ny,1)/(ny)
#y = linspace(0,Ly,ny,endpoint=True)
X, Y = np.meshgrid(x, y,indexing='ij')

Z = -np.sin(X/2)*np.cos(Y**1.5)

loc = matplotlib.ticker.MaxNLocator(20)
lvls = loc.tick_values(Z.min(), Z.max())
fig, ax = plt.subplots(figsize=(7,7))
cp = plt.contour(X,Y,Z,20, colors='k', linestyles=np.where(lvls >= 0, "-", "--"))
plt.clabel(cp, inline=True, fontsize=10)
plt.gca().set_aspect('equal', adjustable='box')
plt.show()
输出:


您应该切换线条样式的顺序。当前,您的条件将
-
(实线)指定给
lvls>=0的轮廓,否则将指定
-
(虚线)。这就是
where
参数的工作原理

在伪形式中,
其中(条件,A,B)
表示如果
条件
赋值
A
否则赋值
B


您当前的代码(不需要):

linestyles=where(lvls >= 0, "-", "--")
linestyles=where(lvls >= 0, "--", "-")
正确样式(所需样式):

linestyles=where(lvls >= 0, "-", "--")
linestyles=where(lvls >= 0, "--", "-")

@LeonardoAraujo:在这种情况下,我们添加了一个示例,使用相同的线条进行绘图,代码工作正常。在我看来,有时它工作得很好,有时却不行。