2

设置...我有一组映射到二维空间(即 f(x,y) = (z,w))的配对值(z,w),我正在从中制作图像映射。我首选的方法是每个点的 rgb 颜色为:(r,g,b) = (z' w', z' (1-w'), z'), z' and w'被归一化为 0 和 1 之间(用于颜色映射目的)。通过这种方式,z 值有效地确定了点的亮度,而 w 值确定了红蓝色调。

这是问题......我可以制作这个图像映射,但颜色条是彩虹颜色映射(不知何故),这不是很有帮助。相反,我需要两个独立的自定义颜色条。我想要的是在右侧有一个垂直颜色条,它是黑白的,缩放到 z 的范围,底部有一个水平颜色条,是蓝红色,缩放到 w 的范围。

有谁知道如何做到这一点?

4

1 回答 1

2

正如 imsc 在对我的问题的评论中指出的那样,答案在于他链接到的matplotlib 示例。这是我正在使用的代码,遵循链接的示例,专门解决了我的问题中的情况:

import matplotlib as mpl

ax_cb1 = fig.add_axes((0.85, 0.125, 0.03, 0.75))
BW_cdict = {
    'red':    ((0.0, 0.0, 0.0),
               (1.0, 1.0, 1.0)),
     'green': ((0.0, 0.0, 0.0),
               (1.0, 1.0, 1.0)),
     'blue': ((0.0, 0.0, 0.0),
               (1.0, 1.0, 1.0))
    }
black_white = mpl.colors.LinearSegmentedColormap('BlackWhite', BW_cdict)
norm = mpl.colors.Normalize(vmin=z_min, vmax=z_max)
cb1 = mpl.colorbar.ColorbarBase(
    ax_cb1, cmap=black_white, norm=norm, orientation='vertical'
)

ax_cb2 = fig.add_axes((0.125, 0.95, 0.75, 0.03))
BR_cdict = {
    'red':    ((0.0, 0.0, 0.0),
               (1.0, 1.0, 1.0)),
     'green': ((0.0, 0.0, 0.0),
               (1.0, 0.0, 0.0)),
     'blue':  ((0.0, 1.0, 1.0),
               (1.0, 0.0, 0.0))
    }
blue_red = mpl.colors.LinearSegmentedColormap('BlueRed', BR_cdict)
norm = mpl.colors.Normalize(vmin=w_min, vmax=w_max)
cb2 = mpl.colorbar.ColorbarBase(
    ax_cb2, cmap=blue_red, norm=norm, orientation='horizontal'
)
于 2012-07-11T22:38:22.650 回答