matplotlib 中的轮廓标签填充轮廓错误?
Posted
技术标签:
【中文标题】matplotlib 中的轮廓标签填充轮廓错误?【英文标题】:Contour labels in matplotlib filled contours wrong? 【发布时间】:2022-01-24 00:08:44 【问题描述】:在下面的示例中,我想将轮廓标签添加到填充轮廓。我对常规轮廓做同样的事情,结果似乎是正确的。然而,对于填充的轮廓,标签是关闭的。这是一个错误还是我误解了什么?
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')
【问题讨论】:
我 认为clabel
仅适用于 contour
,不适用于 contourf
。来自文档:“将标签添加到 cs 中的线条轮廓,其中 cs 是轮廓返回的 ContourSet 对象”
谢谢,大概就是这样。只要颜色条正确,我就可以忍受。
【参考方案1】:
最近的 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')
这当然看起来更好,但并不能完全解决问题。我们希望填充等高线图上的标签看起来像等高线图中的标签。现在正如汤姆指出的那样,我们不能轻易做到这一点,因为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')
我仍然希望这些标签位于情节的不同区域的中心,但我找不到这样做的方法。
【讨论】:
以上是关于matplotlib 中的轮廓标签填充轮廓错误?的主要内容,如果未能解决你的问题,请参考以下文章
Geopandas和Matplotlib,我如何绘制没有任何形状的轮廓?
Matplotlib 直方图或 Seaborn 分布图的 bin 上没有轮廓