Matplotlib multicoloredline使用列表和外部属性作为条件

时间:2013-07-09 08:30:13

标签: python matplotlib plot

我有3个列表,它们都具有相同数量的元素:

time_list ###(float - converted from date object with matplotlib.dates.date2num) 

temperature_list ###(float)

heating_list ###(boolean)

我想使用Matplotlib绘制温度作为时间的函数。我还有列表heating_list,它由布尔值True / False组成,具体取决于当时是否有加热。我希望曲线在加热时为红色,如果不加热则为蓝色。

我找到了这个例子:http://wiki.scipy.org/Cookbook/Matplotlib/MulticoloredLine

但是,我想使用heating_list来决定颜色而不是某些温度值。我还想使用我已经拥有的列表,而不是像示例中那样的numpy数组。

编辑:

我尝试了什么。

colors = ListedColormap(["b", "k"])
norm = BoundaryNorm([not heating, heating], colors.N) ### I don't really know how to define this condition
lc = LineCollection(tuple(zip(time_list, temperature_list)), label = "T1", cmap=colors, norm=norm)
###I tried to make my lists the same form as this "linen = (x0, y0), (x1, y1), ... (xm, ym)"
###According to LineCollection found here: http://matplotlib.org/api/collections_api.html

plt.gca().add_collection(lc)
plt.show()

我也尝试过:

   time_plot = plt.plot(time_list, temperature_list, label = "T1")
   time_plot.gca().add_collection(lc)

有些问题我的列表格式错误,这就是为什么我尝试做所有这些zip / tuple的事情。然后我意识到它无论如何都无法工作,因为我不知道如何定义何时拥有哪种颜色。食谱示例简单地定义了值的范围,而我不希望它依赖于温度值,而是依赖于外部属性。

1 个答案:

答案 0 :(得分:0)

我最终通过绘制几个图来做到这一点,这样每个图总是一种颜色。但是,这会在绘图之间留下小的间隙,您无法轻松地将其作为一个绘图来处理。

如果你不需要连接点,我发现使用散射这样做也更容易,因为散射可以将色图作为参数。