离散颜色条,颜色之间带有刻度标签

时间:2017-02-27 21:46:32

标签: matplotlib colorbar

我试图用离散颜色条绘制一些数据。我正在按照给出的示例(https://gist.github.com/jakevdp/91077b0cae40f8f8244a),但问题是此示例不能以不同的间距工作1-1。例如,链接中示例中的间距仅增加1,但我的数据增加0.5。您可以看到我的代码的输出。Example output from some random data。任何帮助都将不胜感激。我知道我在这里错过了一些关键但却无法弄明白。

import matplotlib.pylab as plt
import numpy as np

def discrete_cmap(N, base_cmap=None):
    """Create an N-bin discrete colormap from the specified input map"""

    # Note that if base_cmap is a string or None, you can simply do
    #    return plt.cm.get_cmap(base_cmap, N)
    # The following works for string, None, or a colormap instance:

    base = plt.cm.get_cmap(base_cmap)
    color_list = base(np.linspace(0, 1, N))
    cmap_name = base.name + str(N)
    return base.from_list(cmap_name, color_list, N)
num=11

x = np.random.randn(40)
y = np.random.randn(40)
c = np.random.randint(num, size=40)


plt.figure(figsize=(10,7.5))

plt.scatter(x, y, c=c, s=50, cmap=discrete_cmap(num, 'jet'))
plt.colorbar(ticks=np.arange(0,5.5,0.5))
plt.clim(-0.5, num - 0.5)
plt.show()

1 个答案:

答案 0 :(得分:1)

好的,这就是我为自己的问题找到的黑客攻击。我确信有更好的方法可以做到这一点,但这适用于我正在做的事情。随意建议一个更好的方法来做到这一点。

import numpy as np
import matplotlib.pylab as plt

def discrete_cmap(N, base_cmap=None):
    """Create an N-bin discrete colormap from the specified input map"""

    # Note that if base_cmap is a string or None, you can simply do
    #    return plt.cm.get_cmap(base_cmap, N)
    # The following works for string, None, or a colormap instance:

    base = plt.cm.get_cmap(base_cmap)
    color_list = base(np.linspace(0, 1, N))
    cmap_name = base.name + str(N)
    return base.from_list(cmap_name, color_list, N)

num=11

plt.figure(figsize=(10,7.5))

x = np.random.randn(40)
y = np.random.randn(40)
c = np.random.randint(num, size=40)


plt.scatter(x, y, c=c, s=50, cmap=discrete_cmap(num, 'jet'))
cbar=plt.colorbar(ticks=range(num))
plt.clim(-0.5, num - 0.5)
cbar.ax.set_yticklabels(np.arange(0.0,5.5,0.5))
plt.show()

由于某种原因,我无法上传与上述代码相关联的图像。上传时收到错误,因此不确定如何显示最终示例。但我只是为垂直颜色条的刻度标签设置了颜色条轴,并传入我想要的标签,它产生了正确的输出。 Correct image