2017-02-27 102 views
0

我试图用离散颜色条来绘制某些数据。我是按照给出的例子(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() 
+0

仅凭这些代码不足以理解你想要达到的目标。你能准确地说出结果的颜色条应该看起来像颜色,颜色数量,标签标签,标签数量?! – ImportanceOfBeingErnest

+0

我只是想让刻度标签与其颜色相关联。例如,每个刻度标签应该位于它们相应的颜色之间。颜色的数量=刻度标签的数量。 –

+0

您选择了11种颜色,值为0到10.这些颜色分布在从蓝色到红色的颜色范围内。如果你现在选择0到5.5之间的标签,那么只有一半的范围会有一个tick标签。这是相当逻辑的。但是,看起来你并不满意。所以再次提出这样的问题:最终的颜色条应该如何在颜色,颜色数量,标签标签,标签数量等方面。那么它应该如何与数据相关(位于0到10之间)? – ImportanceOfBeingErnest

回答

0

好吧,这是我发现我自己的问题的黑客攻击。我相信有一个更好的方法来做到这一点,但这对我正在做的事情有效。随意提出一个更好的方法来做到这一点。

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

+0

对我来说这没有意义。例如,暗红色点的数据值为10,但颜色条显示的值为5.5。所以对于观看它的人来说这完全是令人困惑的。 – ImportanceOfBeingErnest

+0

我刚刚上传了正确的代码正确的情节。这就是我想要的颜色条看起来。 –

+0

我昨天的评论仍然适用 - 颜色栏只显示错误的值。如果这是你想要的,很好。 – ImportanceOfBeingErnest