Python 在matplotlib等高线图中手动设置标签错误

Python 在matplotlib等高线图中手动设置标签错误,python,numpy,matplotlib,Python,Numpy,Matplotlib,我试图在下面的代码中将手动标签添加到轮廓图中。标签是随机打印的。有人知道如何解决这个问题吗?这似乎是Matplotlib中的一个bug 问候,, 大卫 将numpy导入为np 将matplotlib.pyplot作为plt导入 a=0.2 分辨率=100 xarray=np.linspace(0,0.25,num=分辨率) yarray=np.linspace(0,1,num=resolution) A=np.empty([分辨率,分辨率]) xc=0 yc=0 对于xarray中的x: 对于y

我试图在下面的代码中将手动标签添加到轮廓图中。标签是随机打印的。有人知道如何解决这个问题吗?这似乎是Matplotlib中的一个bug

问候,, 大卫

将numpy导入为np
将matplotlib.pyplot作为plt导入
a=0.2
分辨率=100
xarray=np.linspace(0,0.25,num=分辨率)
yarray=np.linspace(0,1,num=resolution)
A=np.empty([分辨率,分辨率])
xc=0
yc=0
对于xarray中的x:
对于yarray中的y:
#打印xc,yc
wp=1./np.pi*np.arctan(np.sin(np.pi*y)*np.sinh(np.pi*a/2.)/
(np.cosh(np.pi*x)-np.cos(np.pi*y)*np.cosh(np.pi*a/2.))

如果wp这是预期的行为

它为
手动
参数中包含的每个
x,y
数据坐标拾取最近的轮廓曲线。当在许多坐标中发现相同的轮廓曲线时,它们可能会开始聚集,就像您的情况一样

如果您使用:

y_pick = [0.01, 0.025, 0.05, 0.075, 0.1, 0.15, 0.2, 0.3, 0.5]
labelpos = ((0, i) for i in y_pick)
你会得到如下结果:


离题:

您可以对代码进行矢量化,避免相对较慢的
for
循环:

import numpy as np
import matplotlib.pyplot as plt

a = 0.2

def fwp(x, y, a):
    return (1./np.pi*np.arctan(np.sin(np.pi*y)*np.sinh(np.pi*a/2.)/
          (np.cosh(np.pi*x)-np.cos(np.pi*y)*np.cosh(np.pi*a/2.))))

resolution = 100
xarray = np.linspace(0, 0.25, num=resolution)
yarray = np.linspace(0, 1, num=resolution)
x, y = np.meshgrid(xarray, yarray, copy=False)
A = fwp(x, y, a)
A[A<=0] += 1
B = np.fliplr(A)
AB = np.hstack((B, A))
将numpy导入为np
将matplotlib.pyplot作为plt导入
a=0.2
def fwp(x,y,a):
返回(1./np.pi*np.arctan(np.sin(np.pi*y)*np.sinh(np.pi*a/2.)/
(np.cosh(np.pi*x)-np.cos(np.pi*y)*np.cosh(np.pi*a/2.))
分辨率=100
xarray=np.linspace(0,0.25,num=resolution)
yarray=np.linspace(0,1,num=resolution)
x、 y=np.meshgrid(xarray,yarray,copy=False)
A=fwp(x,y,A)

A[Aif如果你尝试使用5个以上的标签,那么你会得到在顶部曲线重复的第一个标签(0.1)。使用
np.dstack((np.zero(4),np.arange(0.1,0.5,0.1))[0]
你会得到一个正确的数字。对于我来说,答案和提示似乎也是一个bug!
import numpy as np
import matplotlib.pyplot as plt

a = 0.2

def fwp(x, y, a):
    return (1./np.pi*np.arctan(np.sin(np.pi*y)*np.sinh(np.pi*a/2.)/
          (np.cosh(np.pi*x)-np.cos(np.pi*y)*np.cosh(np.pi*a/2.))))

resolution = 100
xarray = np.linspace(0, 0.25, num=resolution)
yarray = np.linspace(0, 1, num=resolution)
x, y = np.meshgrid(xarray, yarray, copy=False)
A = fwp(x, y, a)
A[A<=0] += 1
B = np.fliplr(A)
AB = np.hstack((B, A))