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

Python如何按条件与样本占比设置多折线图差异化透明度

住宅逐时能耗曲线分温度组透明度调整方案

基础信息

  • 数据集结构:Pandas DataFrame格式,每行存储单日24小时逐时能耗值(取值范围0-1),最后一列Temp_avg为当日户外平均温度
  • 原有绘图规则:基于Temp_avg做coolwarm色阶映射,低温日显示为蓝色、高温日显示为红色,颜色深浅随温度数值线性变化
  • 待实现需求:
    • 占比较低的温度分组保留原有映射颜色,但设置更低透明度,避免干扰占比更高的核心分组展示,核心分组线条保持完全不透明(alpha=1)
    • 透明度逻辑自动化:自动统计高低温组(阈值15℃)样本量,样本量更少的分组自动应用低透明度设置,无需手动指定调整对象

原有实现代码与示例

原有代码

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm
from matplotlib.colors import Normalize

# 生成6行24列的随机示例能耗数据
random_data = np.random.rand(6,24)
df = pd.DataFrame(random_data)
df.index = ['Day_1', 'Day_2', 'Day_3', 'Day_4', 'Day_5', 'Day_6']
df['Temp_avg'] = [30, 28, 4, 6, 5, 9]
print(df)

# 生成温度对应的色阶映射
cmapR = cm.get_cmap('coolwarm')
norm = Normalize(vmin=df['Temp_avg'].min(), vmax=df['Temp_avg'].max())
colors = [cmapR(norm(v)) for v in df['Temp_avg']]

# 绘图
df.iloc[:, 0:24].T.plot(kind='line', color=colors, legend=False)
plt.show()

示例DataFrame输出

0         1         2  ...        22        23  Temp_avg
Day_1  0.806990  0.406354  0.095396  ...  0.492237  0.205613        30
Day_2  0.437527  0.172589  0.285325  ...  0.781534  0.964967        28
Day_3  0.434903  0.175761  0.386593  ...  0.282011  0.539182         4
Day_4  0.465063  0.223923  0.094135  ...  0.372364  0.608879         6
Day_5  0.993202  0.089822  0.976565  ...  0.515035  0.739329         5
Day_6  0.561553  0.759399  0.500864  ...  0.909193  0.723620         9

原有绘图效果

原有绘图效果

修改后实现代码

核心逻辑:统计高低温分组样本量,识别少数类分组后,将该组对应颜色的alpha通道值修改为自定义低透明度,多数类保持alpha=1即可。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm
from matplotlib.colors import Normalize

# 生成6行24列的随机示例能耗数据
random_data = np.random.rand(6,24)
df = pd.DataFrame(random_data)
df.index = ['Day_1', 'Day_2', 'Day_3', 'Day_4', 'Day_5', 'Day_6']
df['Temp_avg'] = [30, 28, 4, 6, 5, 9]

# 生成温度对应的色阶映射
cmapR = cm.get_cmap('coolwarm')
norm = Normalize(vmin=df['Temp_avg'].min(), vmax=df['Temp_avg'].max())
colors = [cmapR(norm(v)) for v in df['Temp_avg']]

# ------------------ 自动调整分组透明度 ------------------
temp_threshold = 15  # 高低温分组阈值,可根据需求修改
minor_alpha = 0.3    # 少数类线条透明度,可根据需求调整(0-1,越小越淡)

# 统计两组样本量
high_temp_mask = df['Temp_avg'] > temp_threshold
high_temp_count = high_temp_mask.sum()
low_temp_count = len(df) - high_temp_count

# 逐行调整颜色透明度
adjusted_colors = []
for is_high_temp, rgba in zip(high_temp_mask, colors):
    r, g, b, _ = rgba
    # 判断当前行所属组是否为少数类
    is_minor = (high_temp_count < low_temp_count and is_high_temp) or \
               (low_temp_count < high_temp_count and not is_high_temp)
    current_alpha = minor_alpha if is_minor else 1
    adjusted_colors.append((r, g, b, current_alpha))
# -------------------------------------------------------------

# 传入调整后的颜色列表绘图
df.iloc[:, 0:24].T.plot(kind='line', color=adjusted_colors, legend=False)
plt.show()

逻辑说明

  • 示例数据中高温日共2天、低温日共4天,高温日为少数类,最终绘图时红色高温线透明度为0.3,蓝色低温线保持完全不透明,不会被少数类线条干扰
  • 若后续数据集低温日样本量少于高温日,代码会自动将低温组蓝色线条设为半透明,无需手动修改判断逻辑
  • 可通过修改temp_threshold调整高低温分界值,修改minor_alpha调整少数类线条的透明程度

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 23:03:54