根据列值更改图中的线条颜色

Changing line colour in plot based on column values

我想制作一个图表,其中它们代表的许多曲线的颜色会根据特定列中的匹配值而变化。

数据库呈现如下:

row0 = {"A":[0,1,2,3,4,5], "B":[0,2,4,6,8,10]}
row1 = {"A":[0,1,2,3,4,5], "B":[0,3,9,12,15,18]}
row2 = {"A":[0,1,2,3,4,5], "B":[0,4,8,12,16,20]}

row = [row0,row1,row2]

Test = {"Float":[0.5,10.24,25.2], "Funtions": row }


Test_ = pd.DataFrame(data = Test)

Dataframe 中的一列包含浮点值。 第二列包含一个包含两列的数据框 (pandas.core.frame.DataFrame)。

基本上,我想在每一行的第二列中绘制图表。

我可以通过这种方式轻松做到这一点:

for m in range(len(Test_)):
    Func = (Test_["Funtions"][m])
    plt.plot(Func["A"], Func["B"])
plt.show()

我插入结果是为了更清楚。

此时,我希望这些曲线中的每一条都根据数值列“Float”的值改变颜色。我还想添加一个颜色条。

希望我说得够清楚了。感谢您的支持。

PS。 谢谢T先生的建议。我又问了一遍,并加了一个实际的例子。

这肯定是我见过的更……有趣的……数据帧结构之一。不知道你是怎么结束的。但这不是这里的问题,所以我们导入(或构造)一个 colormap my_cmap to map the normalized my_norm Float values to colors, then use the normalized my_cmap to create a colorbar:

import matplotlib.pyplot as plt
import pandas as pd 
from matplotlib import cm, colors

#your data
row0 = {"A":[0,1,2,3,4,5], "B":[0,2,4,6,8,10]}
row1 = {"A":[0,1,2,3,4,5], "B":[0,3,9,12,15,18]}
row2 = {"A":[0,1,2,3,4,5], "B":[0,4,8,12,16,20]}
Test_ = pd.DataFrame({"Float": [0.5,10.24,25.2], "Funtions": [row0,row1,row2]})


fig, ax = plt.subplots(figsize=(8, 5))

my_cmap = cm.viridis
my_norm = colors.Normalize(vmin=Test_["Float"].min(), vmax=Test_["Float"].max())

for m in range(len(Test_)):
    Func = (Test_["Funtions"][m])
    ax.plot(Func["A"], Func["B"], color=my_cmap(my_norm(Test_["Float"][m])))
    
fig.colorbar(cm.ScalarMappable(norm=my_norm, cmap=my_cmap), orientation="vertical", label="Float value")

plt.show()

示例输出:

如果您更喜欢对显示的曲线进行分类,您还可以使用定性颜色图或创建自己的颜色图 ListedColorMap:

my_cmap = colors.ListedColormap(["blue", "gold", "red"])