matplotlib中的轮廓标签填充轮廓错误?

时间:2015-11-06 13:49:47

标签: python matplotlib

在下面的例子中,我想为填充的轮廓添加轮廓标签。我对常规轮廓做同样的事情,结果似乎是正确的。但是,对于填充的轮廓,标签是关闭的。这是一个错误还是我误解了什么?

import matplotlib.pyplot as plt
import numpy

X,Z = numpy.meshgrid(range(5),range(5))
V = numpy.zeros([len(X),len(X[0])])
for kx in range(len(X[0])):
    for kz in range(len(X)):
        V[kz][kx] = X[kx][kz]


fig = plt.figure(figsize=(12,8))

ax1 = fig.add_subplot(121)
CS1 = ax1.contour(X,Z,V,range(5))
ax1.clabel(CS1,fontsize=16,colors='k')
cb1 = fig.colorbar(CS1)

ax2 = fig.add_subplot(122)
CS2 = ax2.contourf(X,Z,V,range(5))
ax2.clabel(CS2,fontsize=16,colors='k')
cb2 = fig.colorbar(CS2)

fig.savefig('contour')

being blocked

1 个答案:

答案 0 :(得分:0)

Matplotlib的最新版本在这方面有所改进。我在matplotlib 2.0.2上运行了你的代码,得到了以下图:

import matplotlib.pyplot as plt
import numpy

X,Z = numpy.meshgrid(range(5),range(5))
V = numpy.zeros([len(X),len(X[0])])
for kx in range(len(X[0])):
    for kz in range(len(X)):
        V[kz][kx] = X[kx][kz]


fig = plt.figure(figsize=(12,8))

ax1 = fig.add_subplot(121)
CS1 = ax1.contour(X,Z,V,range(5))
ax1.clabel(CS1,fontsize=16,colors='k')
cb1 = fig.colorbar(CS1)

ax2 = fig.add_subplot(122)
CS2 = ax2.contourf(X,Z,V,range(5))
ax2.clabel(CS2,fontsize=16,colors='k')
cb2 = fig.colorbar(CS2)

fig.savefig('contour')

enter image description here

这当然看起来更好,但它并没有完全解决问题。我们希望填充轮廓图上的标签看起来像轮廓线图中的标签。现在汤姆指出,我们不能轻易做到这一点,因为clabel旨在与contour而不是contourf一起使用。对此有一个不那么整洁的解决方法。我们可以做的是首先创建contour图,其标签可以使用clabel函数轻松操作,然后我们使用contourf填充此图。

import matplotlib.pyplot as plt
import numpy

X,Z = numpy.meshgrid(range(5),range(5))
V = numpy.zeros([len(X),len(X[0])])
for kx in range(len(X[0])):
    for kz in range(len(X)):
        V[kz][kx] = X[kx][kz]
fig = plt.figure(figsize=(12,8))

ax1 = fig.add_subplot(121)
CS1 = ax1.contour(X,Z,V,range(5))
ax1.clabel(CS1,fontsize=16,colors='k')
cb1 = fig.colorbar(CS1)

ax2 = fig.add_subplot(122)
CS2 = ax2.contour(X,Z,V,range(5)) # Creating the contour plot
ax2.clabel(CS2,fontsize=16,colors='k')
CS3 = ax2.contourf(X,Z,V,range(5)) # Creating another filled contour plot on top
cb2 = fig.colorbar(CS3) # Display colorbar for filled contour plot

fig.savefig('contour')

enter image description here

我仍然希望这些标签集中在情节的不同区域,但我无法找到一种方法。