麻烦matplotlib散点图+子图只有一个值

时间:2017-04-25 12:11:06

标签: python matplotlib plot scatter-plot

我对matplotlib很新,我想创建一个绘图和一个范围从0到1的比例;标记与标尺颜色相同。我在使用colorbar方法的散点图中完成了它,但必须指定另一个imshow来绘制颜色条。麻烦的是我得到一个0到0.5的矩形,与标记的颜色相同,经过几天的尝试后,我无法设置它(不会损坏颜色条/比例)。

任何帮助都会非常苛刻!

import matplotlib.pyplot as plt
import matplotlib.cm as cm

data =[0,0.7]
for l in data:         
    cmap1 = cm.RdYlBu_r(l)
    fig = plt.figure(dpi=300)
    ax = fig.add_subplot(1,1,1)
    ax.grid()

    sc = plt.scatter(0, l, s=500, color= cmap1)
    cax = ax.imshow([[l]],vmin=0, vmax=1, interpolation='nearest',aspect=5, cmap= plt.cm.RdYlBu_r)

    plt.yticks([0,0.5, 1])
    plt.xticks([])

    plt.colorbar(cax)
    axes = plt.gca()
    plt.show

这是制作的图像:
returning image

编辑:我已经搜索了'matplotlib colorbar for scatter'和所有变体,但是在应用它时出现错误,例如'TypeError:你必须首先set_array为mappable'。我想因为我一次只有一个值可以映射。对不起,如果不是那样的话;我是matplotlib的新手,我知道我想做一些特别的事情。

1 个答案:

答案 0 :(得分:1)

你得到的彩色矩形来自imshow情节。由于您不想要该矩形,请删除imshow图。

下一步是获取彩条。 plt.colorbar期望ScalarMappable作为第一个参数。所以一个好主意是提供散点图作为参数, plt.colorbar(sc)

此时您可能会收到错误消息"您必须先将set_array设为可映射" 。仔细观察散点图(plt.scatter(0, l, s=500, color= cmap1),可以看出确实没有应用映射,因为单一颜色是由color参数定义的。为了成为一个有用的ScalarMappable,你需要定义一个可以使用c参数映射到颜色的数组。因此,当您尝试使用cmap1 = cm.RdYlBu_r(l)时,不应手动执行映射,而应将该步骤留给散点图。

sc = plt.scatter(0, l, s=500, c=l, vmin=0, vmax=1,cmap= plt.cm.RdYlBu_r)

现在情节有效,但看起来很糟糕,所以你可能想要应用一些设置,如方面,限制图形大小等。

总的来说,你可能会得到这样的结论:

import matplotlib.pyplot as plt

data =[0,0.4,0.7,0.9]
for l in data:         
    fig = plt.figure(figsize=(2,3), dpi=100)
    ax = fig.add_subplot(1,1,1, aspect=10)
    ax.grid()

    sc = plt.scatter(0, l, s=500, c=l, vmin=0, vmax=1,cmap= plt.cm.RdYlBu_r)

    plt.xlim([-1,1])
    plt.ylim([0,1])
    plt.yticks([0,0.5, 1])
    plt.xticks([])

    plt.colorbar(sc)
    plt.subplots_adjust(right=0.7)
    plt.show()

enter image description here