Python matplotlib不均匀间距y

时间:2016-11-23 23:22:37

标签: python python-3.x matplotlib ipython

我想知道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()

enter image description here

由于

2 个答案:

答案 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()

enter image description here

答案 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位于中间。

enter image description here