You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于DataFrame的Condition列多色折线图绘制问题排查

解决折线图按Condition列显示不同颜色的问题

看起来你是想让不同Condition对应的折线(数据点连线)显示不同颜色,但直接绘制整个DataFrame的话,所有数据会被当成一个系列,所以只会显示单一颜色。下面给你两种可行的解决方案:

方法1:Matplotlib手动分组绘制

先按Condition列分组,然后循环每个组分别绘制折线,同时指定对应颜色:

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

# 你的原始数据生成代码
df = pd.DataFrame(dict( 
    Day=pd.date_range('2018-01-01', periods = 60, freq='D'), 
    Utilisation = np.random.rand(60) * 100)) 
df = df.astype(dtype= {"Utilisation":"int64"}) 
df['Condition'] = np.where(df.Utilisation < 10, 'Winter', 
                          np.where(df.Utilisation < 30, 'Summer', 'Spring'))

# 定义颜色映射,对应不同Condition
color_map = {'Winter': 'blue', 'Summer': 'orange', 'Spring': 'green'}

plt.figure(figsize=(10,6))
# 按Condition分组,循环绘制每个组的折线
for condition, group in df.groupby('Condition'):
    plt.plot(group['Day'], group['Utilisation'], label=condition, color=color_map[condition])

plt.xlabel('Day')
plt.ylabel('Utilisation')
plt.title('Utilisation by Condition')
plt.legend()
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

这样每个Condition对应的折线就会用你指定的颜色显示,图例也会自动对应分组内容。

方法2:用Seaborn快速实现

Seaborn的lineplot可以直接通过hue参数指定按某一列区分颜色,代码更简洁:

import seaborn as sns
import matplotlib.pyplot as plt

# 数据生成代码和上面一致,此处省略

plt.figure(figsize=(10,6))
sns.lineplot(data=df, x='Day', y='Utilisation', hue='Condition', palette=color_map)

plt.xlabel('Day')
plt.ylabel('Utilisation')
plt.title('Utilisation by Condition')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

这里的hue='Condition'会告诉Seaborn按Condition列区分线条颜色,palette可以传入自定义的颜色映射,也可以直接用Seaborn自带的调色板。

关键说明

  • 如果你之前直接调用df.plot(x='Day', y='Utilisation'),这种方式不会自动按Condition分组,所有数据会被视为一个整体系列,自然只有一种颜色。
  • 因为你的Day列是按日期顺序生成的,每个分组内的日期已经有序,所以折线会正常连接;如果数据日期无序,建议先对分组内的Day列排序再绘制。

内容的提问来源于stack exchange,提问作者syv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:55:45