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

基于数据类别实现X轴或平行X轴线条着色的折线图绘制方案咨询

实现带类别颜色编码的折线图可视化方案

嘿,这个需求不难搞定!咱们用Python的Matplotlib库就能完美实现——核心思路是:先绘制第一列(X轴)和第二列(Y轴)的默认折线图,然后在绘图区域底部添加对应每个数据点类别的彩色条带,用不同深浅的红、绿、蓝来区分1-6、7-12、13-18这三组类别。下面是具体的实现步骤和代码:

1. 先把数据整理成结构化格式

首先把你的原始一维数据转换成表格形式,用Pandas处理会更方便:

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

# 你的原始数据
raw_data = [0.0, 23.5, 1, 0.1, 12.2, 1, 0.2, 15.0, 3, 0.3, 34.4, 4, 0.4, 37.1, 4]
# 转换成三列的DataFrame:X、Y、类别
df = pd.DataFrame(np.array(raw_data).reshape(-1, 3), columns=["X", "Y", "Category"])
df["Category"] = df["Category"].astype(int)  # 确保类别是整数类型

2. 自定义符合要求的颜色映射

按照你指定的规则创建颜色映射:1-6用深浅红色,7-12用深浅绿色,13-18用深浅蓝色。我们可以分别生成这三个色系的渐变,再合并成自定义的颜色表:

# 生成红色渐变(1-6,从浅到深)
red_shades = plt.cm.Reds(np.linspace(0.3, 1, 6))
# 生成绿色渐变(7-12,从浅到深)
green_shades = plt.cm.Greens(np.linspace(0.3, 1, 6))
# 生成蓝色渐变(13-18,从浅到深)
blue_shades = plt.cm.Blues(np.linspace(0.3, 1, 6))

# 合并三个色系,生成完整的18类颜色映射
custom_colors = np.vstack([red_shades, green_shades, blue_shades])
custom_cmap = LinearSegmentedColormap.from_list("custom_category_cmap", custom_colors, N=18)

3. 绘制折线图 + 类别颜色条带

我们用上下两个子图:上面是主折线图,下面是对应X轴位置的彩色条带,这样能清晰展示每个数据点的类别颜色:

# 创建上下布局的子图,主图占大部分空间
fig, (ax_main, ax_color_bar) = plt.subplots(2, 1, figsize=(10, 6), gridspec_kw={"height_ratios": [8, 1]})

# 绘制主折线图(默认样式)
ax_main.plot(df["X"], df["Y"], marker="o", linestyle="-", color="gray", linewidth=2)
ax_main.set_ylabel("Y Value", fontsize=12)
ax_main.set_title("Y vs X with Category Color Coding", fontsize=14)

# 计算每个X点对应的条带宽度(相邻X的间距,最后一个点复用前一个间距)
x_spacing = np.diff(df["X"]).tolist()
x_spacing.append(x_spacing[-1])

# 给每个X位置绘制对应类别的彩色条带
for x, width, category in zip(df["X"], x_spacing, df["Category"]):
    # 类别从1开始,颜色索引要减1
    bar_color = custom_cmap(category - 1)
    ax_color_bar.add_patch(plt.Rectangle((x, 0), width, 1, color=bar_color))

# 设置颜色条带的显示参数
ax_color_bar.set_xlim(ax_main.get_xlim())
ax_color_bar.set_ylim(0, 1)
ax_color_bar.set_xlabel("X Value", fontsize=12)
ax_color_bar.set_yticks([])  # 隐藏Y轴刻度,只保留彩色条带

# 添加图例,方便区分三大色系组
from matplotlib.patches import Patch
legend_items = [
    Patch(facecolor=custom_cmap(0), label="Category 1-6 (Reds)"),
    Patch(facecolor=custom_cmap(6), label="Category 7-12 (Greens)"),
    Patch(facecolor=custom_cmap(12), label="Category 13-18 (Blues)")
]
ax_main.legend(handles=legend_items, loc="upper right", fontsize=10)

plt.tight_layout()
plt.show()

额外说明

  • 如果想要直接把X轴本身改成对应类别颜色,可以修改X轴的轴脊和刻度颜色,但因为X轴是连续的,这种方式的颜色过渡会比较模糊,不如底部条带清晰直观。
  • 如果你的数据量很大,这个方案依然适用,彩色条带会自动适配每个X点的位置。
  • 要是你偏好Seaborn库,也可以结合lineplot和自定义colormap,但Matplotlib的方式更灵活可控。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 20:47:35