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

如何用Matplotlib绘制随Y值切换颜色的连续温度折线图?

实现按温度阈值切换颜色的连续折线图

核心思路是将数据拆分为高于0℃和≤0℃的连续分段,同时保留相邻分段的端点,确保折线衔接无断点。matplotlib的plt.plot不支持直接传入布尔数组作为颜色参数,所以必须通过分段绘制解决。

具体实现步骤(基于NumPy+Matplotlib)

  1. 导入依赖库
import matplotlib.pyplot as plt
import numpy as np
  1. 准备数据(替换为你的真实数据集)
# 模拟1000天的日期与温度数据
dates = np.arange('2020-01-01', '2022-09-27', dtype='datetime64[D]')
temps = np.random.normal(0, 5, size=len(dates))  # 均值0℃、标准差5℃的模拟数据
  1. 定位温度跨越0℃的分界点
# 找出温度符号变化的位置(从正变负或负变正)
cross_indices = np.where(np.diff(np.sign(temps)) != 0)[0] + 1
# 生成分段索引区间:起始点→所有分界点→结束点
split_indices = np.concatenate([[0], cross_indices, [len(temps)]])
  1. 分段绘制折线
plt.figure(figsize=(12, 6))

for i in range(len(split_indices)-1):
    start_idx = split_indices[i]
    end_idx = split_indices[i+1]
    # 判断当前分段的温度属性(取分段第一个点即可,连续段温度符号一致)
    line_color = 'red' if temps[start_idx] > 0 else 'blue'
    plt.plot(dates[start_idx:end_idx], temps[start_idx:end_idx], color=line_color, linewidth=2)

# 添加辅助元素
plt.xlabel('日期')
plt.ylabel('温度 (℃)')
plt.title('每日温度变化(>0℃为红色,≤0℃为蓝色)')
plt.axhline(y=0, color='gray', linestyle='--', linewidth=1)  # 0℃参考线
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

如果你用Pandas处理数据

import pandas as pd

# 转换为DataFrame(替换为你的真实数据结构)
df = pd.DataFrame({'date': dates, 'temp': temps})
# 标记温度符号变化的位置
df['temp_sign'] = np.sign(df['temp'])
cross_mask = df['temp_sign'].ne(df['temp_sign'].shift())
cross_indices = df[cross_mask].index.tolist()
split_indices = [0] + cross_indices + [len(df)]

plt.figure(figsize=(12, 6))
for s_idx, e_idx in zip(split_indices[:-1], split_indices[1:]):
    segment = df.iloc[s_idx:e_idx]
    line_color = 'red' if segment['temp'].iloc[0] > 0 else 'blue'
    plt.plot(segment['date'], segment['temp'], color=line_color, linewidth=2)

# 辅助元素设置同上
plt.xlabel('日期')
plt.ylabel('温度 (℃)')
plt.title('每日温度变化(>0℃为红色,≤0℃为蓝色)')
plt.axhline(y=0, color='gray', linestyle='--', linewidth=1)
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

为什么你之前的方法失效?

  • 散点图仅绘制离散点,无法形成连续折线;
  • 直接分段绘制若未保留分界端点,会导致相邻折线断开;
  • plt.plot不支持布尔数组作为颜色参数,因此传入时会触发ValueError;
  • 单独绘制两条折线(分别取>0和≤0的点)会因非连续数据导致折线跳跃、出现断点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 19:42:47