用于Scatterplot的自定义Matplotlib ColorBar

时间:2014-04-15 16:42:59

标签: python matplotlib scatter-plot colorbar color-mapping

我目前在他们自己的子图中有一些散点图。格式化数据的方式是:

ID, X, Y, Colors, Area
0, x1, y1, r, 1
1, x2, y2, g, 1
2, x3, y3, r, 3
3, x4, y4, b, 4
....
n, xn, yn, g, 3

因此,当我绘制散点图时,它看起来像ax.scatter(X, Y, color=Colors) 因此,每个点都是红色,绿色或蓝色。我为每个Area设置了不同的散点图。

我正在尝试在侧面创建自定义颜色条以显示三种颜色(红色,绿色和蓝色),以及每种颜色的关联标签。在这种情况下,它是一个收入阶层。

到目前为止,谷歌搜索引导我研究创建自定义色彩映射,然后使用该色彩图在自己的子图中绘制色条。但是,在经历matplotlib示例之前,我从来没有使用过自定义色彩映射。我有点不知所措。

到目前为止,我有这个,但我很确定它只是随机的东西(所有它给我的是ax3子图中的灰度色图):

cdict1 = {'red': ((0,0,0),(1,1,1)),
        'green': ((0,0,0),(1,1,1)),
        'blue': ((0,0,0),(1,1,1))}
rgbtest = LinearSegmentedColormap('test', cdict1)
plt.register_cmap(name='test', data=cdict1)
cmap = plt.get_cmap('test')
matplotlib.colorbar.ColorbarBase(ax3, cmap=rgbtest)

有什么建议吗?我希望这是有道理的。谢谢。干杯

1 个答案:

答案 0 :(得分:0)

我最终还是坚持了下去。我不确定这是否是最佳方式 - 如果您有其他建议,或许我可以从中学习以备将来使用!

cmap = matplotlib.colors.ListedColormap(['green', 'blue', 'red'])
bounds=[0,125,200,400]
cax = inset_axes(ax3, width="8%", height='70%', loc=4)
cbar = matplotlib.colorbar.ColorbarBase(cax, cmap=cmap, boundaries=bounds)
cax.yaxis.set_ticks_position('left')
cbar.ax.set_yticklabels(['0', '125', '200', '200+'])
cax.yaxis.set_label_position('left')
cbar.set_label('Income (,000s)')