【问题标题】:color range in LineCollectionLineCollection 中的颜色范围
【发布时间】:2013-05-06 18:54:59
【问题描述】:

我在图像上绘制多色线条,线条的颜色应该代表一个给定的参数,该参数大约在 -1 和 3 之间变化。

以下代码部分是构建这些行的部分:

            x = self._tprun.r[0,p,::100]  # x coordinate
            y = self._tprun.r[1,p,::100]  # y coordinate

            points = np.array([x, y]).T.reshape(-1, 1, 2)
            segments = np.concatenate([points[:-1], points[1:]], axis=1)

            # 'color' is the parameter that will color the line

            vmin =  self._color[p,:].min()
            vmax =  self._color[p,:].max()

            lc = LineCollection(segments,
                                cmap=plt.get_cmap('jet'),
                                norm=plt.Normalize(vmin=vmin,vmax=vmax))

            lc.set_array(self._color[p,:]) 

            lc.set_linewidth(1)
            self._ax.add_collection(lc)

这段代码在 'p' 的循环中,因此它将在数组 'x' 和 'y' 给定的位置创建几行,并且颜色应该由 'self._color[ 的值给出p,:]'。

正如我所说,'_color[p,:]' 大致在 -1 和 3 之间变化。下面是 '_color[p,:]' 的示例:

我的问题是创建的线条看起来没有太大的颜色变化,它们看起来都是单色的深蓝色,而 _color[p,:] 变化很大,我要求归一化取其最小值/最大值.

这里是这样一条线的一个例子(看看振荡的深蓝色线,其他黑色线是另一个值的轮廓):

这些功能的工作方式有什么我遗漏的吗?

【问题讨论】:

标签: matplotlib


【解决方案1】:

知道了! 问题的答案在这里:

        x = self._tprun.r[0,p,::100]  # re-sample every 100 values !!
        y = self._tprun.r[1,p,::100]  # 

        # [...]

        #lc.set_array(self._color[p,:]) # self._color[p,:] is not resampled
        lc.set_array(self._color[p,::100])  # this works because resampled

意味着“颜色”数组实际上比用于线段位置的数组大得多......只有“_color”的第一个值在其值变化不大的情况下使用。

【讨论】:

  • 很高兴你知道了!请记住接受您的答案(并更新它以实际解决问题;))何时它会让您
  • “接受你的答案”和“更新它以解决问题”是什么意思?
  • “接受答案”是点击灰色的大复选框,您答案中的代码只是您说不起作用的代码的副本。您应该更新它以重新采样颜色数据。
  • @Heimdall 您还应该尝试将人们为您提供的其他一些答案也标记为“已接受”。到目前为止,您有 14 个问题,而您只接受了这一个!
  • 是的,我会这样做,谢谢!我真的不知道这里的情况如何。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-18
  • 1970-01-01
  • 1970-01-01
  • 2016-01-21
  • 1970-01-01
相关资源
最近更新 更多