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

如何绘制x轴显示Group1且带分组切换垂直线的折线图

解决方案:按Group2顺序绘制折线图并添加分组垂直线

需求说明

  • 以Value列为y轴,严格按照Group2的出现顺序绘制折线图
  • x轴标签显示Group1(而非Group2)
  • 在Group1取值切换的位置添加蓝色垂直线,区分不同大组的绘图区域

数据集示例

Group1Group2Value
AA10.06
AA20.12
AA30.11
AA40.04
BB10.09
BB20.20
CC10.10
CC20.08
CC30.20

实现代码

import pandas as pd
import matplotlib.pyplot as plt

# 构造数据集
a = {'Group1':['A', 'A', 'A', 'A', 'B', 'B','C', 'C', 'C'], 
     'Group2': ['A1', 'A2', 'A3', 'A4', 'B1', 'B2', 'C1', 'C2', 'C3'],
     'Value':[0.06, 0.12, 0.11, 0.04, 0.09, 0.2, 0.1, 0.08, 0.2]}

df = pd.DataFrame(a)
# 重置索引,方便用行索引对应Group2的出现顺序
df = df.reset_index(drop=True)

# 定位Group1分组切换的位置:找到每个新分组的起始行索引
switch_points = df[df['Group1'] != df['Group1'].shift(1)].index[1:]
# 计算垂直线的x坐标(位于两个分组的中间位置)
vline_x = [x - 0.5 for x in switch_points]

# 绘制图表
plt.figure(figsize=(10, 6))
# 按Group2顺序绘制折线图
plt.plot(df.index, df['Value'], marker='o', color='blue', linewidth=2)

# 添加分组分隔的蓝色垂直线
for x in vline_x:
    plt.axvline(x=x, color='blue', linestyle='--', alpha=0.7)

# 设置x轴刻度标签为Group1
plt.xticks(ticks=df.index, labels=df['Group1'], rotation=0)

# 设置图表标签与标题
plt.xlabel('Group1', fontsize=10)
plt.ylabel('Value', fontsize=10)
plt.title('Value Trend with Group Separators', fontsize=12)

plt.tight_layout()
plt.show()

代码说明

  1. 索引重置:将原多级索引的DataFrame重置为普通索引,用行索引对应Group2的出现顺序,保证折线图的绘制顺序正确。
  2. 切换点定位:通过比较当前行与前一行的Group1值,找到每个新分组的起始位置,计算出分组之间的中间坐标作为垂直线位置。
  3. 折线绘制:以行索引为x轴、Value为y轴绘制折线,确保顺序与Group2一致。
  4. x轴标签替换:将x轴的刻度标签替换为Group1的值,满足显示需求。
  5. 垂直线添加:在分组切换的中间位置添加蓝色虚线,清晰区分不同大组的绘图区域。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 02:57:03