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

使用Matplotlib绘制4垂直子图:多样本Flow Rate等参数曲线需求

解决方案

1. 正确的数据集字典结构

先构建层级清晰的字典,方便后续数据处理与绘图。顶层键为参数名称(Flow Rate、Temperature等),每个参数下包含三个样本的日期序列和对应参数值:

import pandas as pd
import matplotlib.pyplot as plt

# 示例数据集字典
dataset = {
    "Flow Rate": {
        "Sample A": {
            "dates": ["2024-01-03", "2024-01-01", "2024-01-02"],
            "values": [5.2, 4.8, 5.0]
        },
        "Sample B": {
            "dates": ["2024-01-03", "2024-01-01", "2024-01-02"],
            "values": [6.1, 5.9, 6.0]
        },
        "Sample C": {
            "dates": ["2024-01-03", "2024-01-01", "2024-01-02"],
            "values": [4.5, 4.3, 4.4]
        }
    },
    "Temperature": {
        "Sample A": {
            "dates": ["2024-01-03", "2024-01-01", "2024-01-02"],
            "values": [25.3, 24.8, 25.0]
        },
        "Sample B": {
            "dates": ["2024-01-03", "2024-01-01", "2024-01-02"],
            "values": [26.1, 25.9, 26.0]
        },
        "Sample C": {
            "dates": ["2024-01-03", "2024-01-01", "2024-01-02"],
            "values": [24.5, 24.3, 24.4]
        }
    },
    "Pressure": {
        "Sample A": {
            "dates": ["2024-01-03", "2024-01-01", "2024-01-02"],
            "values": [1.2, 1.1, 1.15]
        },
        "Sample B": {
            "dates": ["2024-01-03", "2024-01-01", "2024-01-02"],
            "values": [1.3, 1.25, 1.28]
        },
        "Sample C": {
            "dates": ["2024-01-03", "2024-01-01", "2024-01-02"],
            "values": [1.05, 1.0, 1.03]
        }
    },
    "Concentration": {
        "Sample A": {
            "dates": ["2024-01-03", "2024-01-01", "2024-01-02"],
            "values": [0.8, 0.75, 0.78]
        },
        "Sample B": {
            "dates": ["2024-01-03", "2024-01-01", "2024-01-02"],
            "values": [0.9, 0.88, 0.89]
        },
        "Sample C": {
            "dates": ["2024-01-03", "2024-01-01", "2024-01-02"],
            "values": [0.7, 0.68, 0.69]
        }
    }
}

2. 数据预处理:日期排序

由于测试日期无序,需将日期转为datetime类型并按时间排序对应的值:

# 遍历所有参数与样本,完成日期排序
for param in dataset:
    for sample in dataset[param]:
        # 转换日期为datetime对象
        dates = pd.to_datetime(dataset[param][sample]["dates"])
        values = dataset[param][sample]["values"]
        # 按日期排序,同步对应的值
        sorted_indices = dates.argsort()
        dataset[param][sample]["dates"] = dates[sorted_indices]
        dataset[param][sample]["values"] = [values[i] for i in sorted_indices]

3. 绘制4行1列子图

用matplotlib创建垂直排列的子图,每个子图对应一个参数,绘制三个样本的曲线:

# 创建4行1列的子图布局,共享x轴对齐日期
fig, axes = plt.subplots(nrows=4, ncols=1, figsize=(10, 16), sharex=True)
params = list(dataset.keys())
colors = ["#1f77b4", "#ff7f0e", "#2ca02c"]  # 三个样本的区分色
samples = ["Sample A", "Sample B", "Sample C"]

# 遍历每个子图与参数,绘制曲线
for ax, param in zip(axes, params):
    for sample, color in zip(samples, colors):
        ax.plot(dataset[param][sample]["dates"], 
                dataset[param][sample]["values"],
                label=sample,
                color=color,
                marker="o")
    ax.set_title(f"{param}", fontsize=12)
    ax.set_ylabel(param.split()[0], fontsize=10)
    ax.grid(True, alpha=0.3)
    ax.legend()

# 设置底部子图的x轴标签
axes[-1].set_xlabel("Test Date", fontsize=10)
plt.tight_layout()
plt.show()

关键说明

  • 字典采用参数-样本-日期/值的层级结构,便于统一遍历处理;
  • 利用pd.to_datetime和argsort()实现日期排序,确保曲线按时间顺序展示;
  • 开启sharex=True让所有子图日期轴对齐,提升可读性;
  • 用不同颜色+标记点区分样本,增强曲线辨识度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 03:01:37