我想知道y轴如何具有这种行为(不均匀的间距),而没有指定任何关于yscale的东西,如下面的代码所示。
import numpy as np
import matplotlib.pyplot as plt
d=np.zeros([np.arange(0,8).shape[0],np.arange(0,100).shape[0]])
for i in np.arange(0,8):
for j in np.arange(0,100):
d[i,j]=(i+290)**2+j**2
c=np.array([1000,850,700,500,400,300,250,200])
plt.contourf(np.arange(0,100),c,d);plt.colorbar()
plt.yticks(c,c[::-1])
plt.show()
由于
答案 0 :(得分:1)
import numpy as np
import matplotlib.pyplot as plt
d = np.zeros([np.arange(0, 8).shape[0], np.arange(0, 100).shape[0]])
for i in np.arange(0, 8):
for j in np.arange(0, 100):
d[i, j] = (i + 290) ** 2 + j ** 2
l = [1000, 850, 700, 500, 400, 300, 250, 200]
r = [l[-1] + l[0]-x for x in l]
c = np.array(l)
e = np.array(r)
plt.contourf(np.arange(0, 100), c, d)
plt.colorbar()
plt.yticks(e, c)
plt.show()
答案 1 :(得分:0)
该代码的结果并不令人惊讶。有人看这个图的唯一令人困惑的事情是y轴上的倒置标签。但既然你故意选择颠倒它们,你就不应该抱怨。
这是一个例子,希望能够说明为什么反转轴标签非常混乱。
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(100)
y = np.array([0,1,5,10])
Z=np.zeros((len(y),len(x)))
for i in range(len(y)):
for j in range(len(x)):
Z[i,j]=i*j
fig, (ax, ax2, ax3) = plt.subplots(ncols=3)
im = ax.contourf(x,y,Z)
ax.set_yticks(y)
ax.set_yticklabels(y[::-1])
ax.set_title("inverted labels")
im2 = ax2.contourf(x,y,Z)
ax2.set_yticks(y)
ax2.set_yticklabels(y)
ax2.set_title("normal labels")
im3 = ax3.contourf(x,y,Z)
ax3.set_yticks(y)
ax3.set_yticklabels("abcd")
ax3.set_title("letters as labels")
plt.show()
在中间,轴标签显示为人们期望的,左侧是倒置。在右侧,我们选择了一些非数字标签 可以看出,在所有情况下,比例都是线性的。在我们没有弄乱标签的情况下,从0到10的等级中可以清楚地看到,5位于中间。