首页 > 解决方案 > Python - 基于另一列的动态折线图标记颜色

问题描述

我正在尝试在Python中创建一个简单的折线图,我想为每个客户显示一条线,显示基于值(y 轴)和日期(x 轴)的趋势。标记颜色应基于颜色字段。

请在下面找到示例数据和预期输出(对不起我的涂鸦)

此处的示例数据

预期产出

标签: pythonmatplotlibcolorslinechartmarkers

解决方案


一种简单的方法是首先使用该plot函数绘制线条,例如黑色,然后使用scatter绘制彩色标记。这里我展示一个例子:

我生成类似于您的数据如下(我想您将数据存储在熊猫数据框中):

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

columns = ['CustID', 'Date', 'Value', 'Color']
data = []

np.random.seed(42)
for cus_id in np.arange(1, 5):
    for date in ['jan', 'feb', 'mar', 'apr']:
        data.append([cus_id, date, np.random.randint(20,35),
                     np.random.choice(['red', 'blue', 'green'])])

df = pd.DataFrame(data=data, columns=columns)

此时,df包含此表

最后,绘制折线图:

fig, ax = plt.subplots(1)
for _, df_cus in df.groupby('CustID'):
    ax.plot(df_cus.Date, df_cus.Value, color='black', zorder=0)
    ax.scatter(df_cus.Date, df_cus.Value, color=df_cus.Color, zorder=1)

这是输出

zorder用来确保散点图始终位于黑线之上。


推荐阅读