Jan*_*Jan 5 matplotlib contour colorbar
我想创建一个伪彩色图(例如contour或contourf)和一个颜色条。出于实际原因,我希望颜色条的范围与底层可映射不同。
在下面的示例中,数据 Z 的范围从 0 到 10000,映射到颜色图。颜色条的范围是相同的。
import numpy
from matplotlib import pyplot
X = numpy.arange(100)
Y = numpy.arange(100)
Z = numpy.arange(100**2).reshape((100,100))
f = pyplot.figure()
ax = f.gca()
cf = ax.contourf(X,Y,Z,100)
cbar = f.colorbar(cf, ticks=[3000,4000,5000,6000])
pyplot.show()
Run Code Online (Sandbox Code Playgroud)

现在,我想“放大”颜色条,即生成一个范围从 3000 到 6000 的颜色条。这个新的颜色条仍将作为图例并为每个刻度提供适当的颜色(3000 = 蓝色,6000 = 黄色)。既不实现cbar.set_clim()也不cf.set_clim()实现这一点。
一般来说,抑制颜色条的部分是一个坏主意,但这里有一个超级黑客的方法来做到这一点。
import numpy
from matplotlib import pyplot
X = numpy.arange(100)
Y = numpy.arange(100)
Z = numpy.arange(100**2).reshape((100,100))
f = pyplot.figure()
ax = f.gca()
cf = ax.contourf(X,Y,Z,100)
cbar = f.colorbar(cf, ticks=[3000,4000,5000,6000])
cbar.ax.set_ylim([cbar.norm(3000), cbar.norm(6000)])
cbar.outline.set_ydata([cbar.norm(3000)] * 2 + [cbar.norm(6000)] * 4 + [cbar.norm(3000)] * 3)
cbar.ax.set_aspect(60) # <- tweak this to get the aspect ratio you want
pyplot.show()
Run Code Online (Sandbox Code Playgroud)
我称其为 hacky,因为它涉及到颜色条的一大堆内部结构。 cbar.outline是一个Line2D对象,它是颜色条周围的黑框,设置set_ydata角上的 ydata 以匹配您要查看的子区域。尝试去掉那条线,看看会发生什么。
您可能想研究一下颜色图的clip功能。
| 归档时间: |
|
| 查看次数: |
6313 次 |
| 最近记录: |