Matplotlib is hiring a Research Software Engineering Fellow! See discourse for details. Apply by January 3, 2020
本教程演示如何在没有附加绘图的情况下构建颜色条。
ColorbarBase
来源于 ScalarMappable
并将颜色条放在指定的轴上,这样它就拥有了独立颜色条所需的一切。它可以用来为给定的颜色映射制作颜色条;它不需要像图像这样的可映射对象。在本教程中,我们将探讨如何使用独立的颜色条。
设置颜色映射和norm以对应将使用颜色条的数据。然后通过调用 ColorbarBase
并指定轴、颜色映射、范数和方向作为参数。在这里,我们创建了一个基本的带有刻度和标签的连续颜色条。有关更多信息,请参阅 colorbar
应用程序编程接口。
import matplotlib.pyplot as plt
import matplotlib as mpl
fig, ax = plt.subplots(figsize=(6, 1))
fig.subplots_adjust(bottom=0.5)
cmap = mpl.cm.cool
norm = mpl.colors.Normalize(vmin=5, vmax=10)
cb1 = mpl.colorbar.ColorbarBase(ax, cmap=cmap,
norm=norm,
orientation='horizontal')
cb1.set_label('Some Units')
fig.show()
第二个示例说明了 ListedColormap
从一组列出的颜色生成颜色映射, colors.BoundaryNorm()
它基于离散的间隔和扩展的端点生成一个颜色映射索引,以显示“过”和“欠”值颜色。over和under用于显示规范化之外的数据 [0,1] 范围。在这里,我们将颜色作为灰色阴影传递,作为编码0-1范围内的浮点的字符串。
如果A ListedColormap
如果使用,则边界数组的长度必须大于颜色列表的长度。边界必须单调递增。
这一次,除了前面的参数外,我们还传递了更多的参数 ColorbarBase
. 要在颜色栏上显示超出范围的值,必须使用 延伸 关键字参数。使用 延伸 ,必须指定两个额外的边界。最后,spacing参数确保间隔按比例显示在颜色栏上。
fig, ax = plt.subplots(figsize=(6, 1))
fig.subplots_adjust(bottom=0.5)
cmap = mpl.colors.ListedColormap(['red', 'green', 'blue', 'cyan'])
cmap.set_over('0.25')
cmap.set_under('0.75')
bounds = [1, 2, 4, 7, 8]
norm = mpl.colors.BoundaryNorm(bounds, cmap.N)
cb2 = mpl.colorbar.ColorbarBase(ax, cmap=cmap,
norm=norm,
boundaries=[0] + bounds + [13],
extend='both',
ticks=bounds,
spacing='proportional',
orientation='horizontal')
cb2.set_label('Discrete intervals, some other units')
fig.show()
在这里,我们将演示自定义长度的颜色条扩展的用法,该扩展用于具有离散间隔的颜色条。要使每个延伸部分的长度与内饰颜色的长度相同,请使用 extendfrac='auto'
.
fig, ax = plt.subplots(figsize=(6, 1))
fig.subplots_adjust(bottom=0.5)
cmap = mpl.colors.ListedColormap(['royalblue', 'cyan',
'yellow', 'orange'])
cmap.set_over('red')
cmap.set_under('blue')
bounds = [-1.0, -0.5, 0.0, 0.5, 1.0]
norm = mpl.colors.BoundaryNorm(bounds, cmap.N)
cb3 = mpl.colorbar.ColorbarBase(ax, cmap=cmap,
norm=norm,
boundaries=[-10] + bounds + [10],
extend='both',
extendfrac='auto',
ticks=bounds,
spacing='uniform',
orientation='horizontal')
cb3.set_label('Custom extension lengths, some other units')
fig.show()