颜色映射数据(Color mapped data)
我们常常希望在一个图表中,用颜色映射(colormap)来表示第三维度。Matplotlib有许多图表类型支持这种做法:
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
import matplotlib as mplimport matplotlib.pyplot as pltimport numpy as npnp.random.seed(19680801) # seed the random number generator.data1, data2, data3 = np.random.randn(3, 100) # make 3 random data sets
X, Y = np.meshgrid(np.linspace(-3, 3, 128), np.linspace(-3, 3, 128))Z = (1 - X/2 + X**5 + Y**3) * np.exp(-X**2 - Y**2)
fig, axs = plt.subplots(2, 2, layout='constrained')pc = axs[0, 0].pcolormesh(X, Y, Z, vmin=-1, vmax=1, cmap='RdBu_r')fig.colorbar(pc, ax=axs[0, 0])axs[0, 0].set_title('pcolormesh()')
co = axs[0, 1].contourf(X, Y, Z, levels=np.linspace(-1.25, 1.25, 11))fig.colorbar(co, ax=axs[0, 1])axs[0, 1].set_title('contourf()')pc = axs[1, 0].imshow(Z**2 * 100, cmap='plasma', norm=mpl.colors.LogNorm(vmin=0.01, vmax=100))fig.colorbar(pc, ax=axs[1, 0], extend='both')axs[1, 0].set_title('imshow() with LogNorm()')
pc = axs[1, 1].scatter(data1, data2, c=data3, cmap='RdBu_r')fig.colorbar(pc, ax=axs[1, 1], extend='both')axs[1, 1].set_title('scatter()')
fig.show()
颜色映射(Colormaps)
这些都是从“可图量映射(ScalarAppable)”对象派生的艺术家(Artists)的示例。通过cmap参数指定的某种颜色映射,它们都可以将最小值(vmin参数)到最大值(vmax参数)线性映射为颜色变化。Matplotlib有许多颜色映射可供选择(在Matplotlb中选择颜色映射),也可以自己制作(在Matplotlib中创建颜色映射)或下载使用第三方软件包。ScalarAppable:https://matplotlib.org/stable/api/cm_api.html#matplotlib.cm.ScalarMappable在Matplotlb中选择颜色映射:https://matplotlib.org/stable/tutorials/colors/colormaps.html在Matplotlib中创建颜色映射:https://matplotlib.org/stable/tutorials/colors/colormap-manipulation.html第三方软件包:
https://matplotlib.org/mpl-third-party/#colormaps-and-styles
规格化(Normalizations)
有时需要将数据非线性映射到颜色变化,上面的LogNorm示例就是一个例子。这时,需要通过向ScalarAppable类型对象(由ScalarAppable派生的)提供norm参数而不是vmin和vmax参数来实现。更多规格化的信息在“颜色映射规格化”中展示:
https://matplotlib.org/stable/tutorials/colors/colormapnorms.html。
色条(Colorbars)
图表中附加的色条(colorbar)是一条色谱带,它将颜色与不可见的数据一一对应起来。色条是图形级别(figure-level,即不在相应的Axes内显示)的艺术家(Artists),并关联到ScalarAppable类型对象以获取规格和颜色映射信息,通常会从父Axes中割取空间以显示。色条的放置方法有点复杂:有关详细信息,请参见放置色条(Placing Colorbars)。还可以,用extend关键字更改色条的外观,以在末端添加箭头;用shrink(收缩)和aspect(纵横)关键字以控制大小。最后,色条具有合适规格的默认定位器和格式器。可以像其他轴(Axis)对象一样对色条进行更改。
colorbar:https://matplotlib.org/stable/api/figure_api.html#matplotlib.figure.Figure.colorbarPlacing Colorbars:
https://matplotlib.org/stable/gallery/subplots_axes_and_figures/colorbar_placement.html
多图表(Figures)和多图表域(Axes)
可以通过多次调用fig=plt.figure()或fig2,ax=plt.subplots()生成多个图表(Figure)。在程序中保留图表对象的引用,这样就可以将艺术家(Artists)添加到任一图表中。
有多种方式在一个图表(Figure)中添加多个图表域(Axes),但最基本的方法是上面的plt.subplots()。但如果要实现有跨行或跨列的Axes对象的复杂的布局,就要使用subplot_mosaic方法:
https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.subplot_mosaic.html#matplotlib.pyplot.subplot_mosaic。
·
·
·
·
·
·
·
import matplotlib.pyplot as pltfig, axd = plt.subplot_mosaic([['upleft', 'right'], ['lowleft', 'right']], layout='constrained')axd['upleft'].set_title('upleft')axd['lowleft'].set_title('lowleft')axd['right'].set_title('right');fig.show()
Matplotlib有非常复杂的布局图表域(Axes)的工具:请参见在一图表中布局多个图表域(Arranging multiple Axes in a Figure)以及复杂和语义图形组合(Complex and semantic figure composition)。Arranging multiple Axes in a Figure:https://matplotlib.org/stable/tutorials/intermediate/arranging_axes.htmlComplex and semantic figure composition:
https://matplotlib.org/stable/tutorials/provisional/mosaic.html
更多阅读
参阅图表类型(Plot types)获取有关更多图表类型的信息,阅读API参考(API reference),特别是图表域API(Axes API)也比较重要。
绘图类型(Plot types):打开API参考(API reference):https://matplotlib.org/stable/api/index.html图表域API(Axes API):https://matplotlib.org/stable/api/axes_api.html