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

如何绘制二分类Class数据与连续xcentre数据的组合图表

实现方案:绘制xcentre折线与Class=1标记图

步骤1:导入依赖库

import pandas as pd
import matplotlib.pyplot as plt

步骤2:准备数据(直接替换为你的真实DataFrame即可)

# 示例数据,与你提供的结构一致
data = {
    'Class': [0,0,0,0,0,0,0,0,0,0],
    'Frame': [1,2,3,4,5,6,7,8,9,10],
    'X1': [465,465,465,465,464,464,464,464,464,464],
    'Y1': [570]*10,
    'X2': [577,577,577,577,577,577,576,576,576,576],
    'Y2': [698,699,699,699,699,699,699,699,699,699],
    'xcentre': [521.0,521.0,521.0,521.0,520.5,520.5,520.0,520.0,520.0,520.0]
}
df = pd.DataFrame(data)

步骤3:绘制图表

提供两种实现方式,可根据示例图样式选择:

方式1:用条形图标记Class=1位置

fig, ax1 = plt.subplots(figsize=(10,6))

# 绘制红色折线:xcentre随Frame的变化趋势
ax1.plot(df['Frame'], df['xcentre'], color='red', linewidth=2, label='xcentre')
ax1.set_xlabel('Frame')
ax1.set_ylabel('xcentre Value', color='red')
ax1.tick_params(axis='y', labelcolor='red')

# 创建双y轴,避免数值范围冲突
ax2 = ax1.twinx()

# 绘制Class=1的条形标记
ax2.bar(df['Frame'], df['Class'], color='darkblue', alpha=0.6, label='Class=1')
ax2.set_ylabel('Class', color='darkblue')
ax2.tick_params(axis='y', labelcolor='darkblue')
ax2.set_ylim(0, 1.2)  # 适配Class的0/1二进制值范围

# 合并两个轴的图例
lines1, labels1 = ax1.get_legend_handles_labels()
lines2, labels2 = ax2.get_legend_handles_labels()
ax1.legend(lines1 + lines2, labels1 + labels2, loc='upper right')

plt.title('xcentre Trend with Class=1 Markers')
plt.show()

方式2:用竖线标记Class=1位置(更贴近示例图样式)

如果示例图中的Class标记是底部竖线,替换条形图代码为竖线绘制:

fig, ax1 = plt.subplots(figsize=(10,6))

# 红色折线部分保持不变
ax1.plot(df['Frame'], df['xcentre'], color='red', linewidth=2, label='xcentre')
ax1.set_xlabel('Frame')
ax1.set_ylabel('xcentre Value', color='red')
ax1.tick_params(axis='y', labelcolor='red')

ax2 = ax1.twinx()

# 筛选Class=1的Frame位置,绘制竖线标记
class_1_frames = df[df['Class'] == 1]['Frame']
ax2.vlines(class_1_frames, ymin=0, ymax=1, color='darkblue', linewidth=4, label='Class=1')
ax2.set_ylabel('Class', color='darkblue')
ax2.tick_params(axis='y', labelcolor='darkblue')
ax2.set_ylim(0, 1.2)

# 合并图例
lines1, labels1 = ax1.get_legend_handles_labels()
lines2, labels2 = ax2.get_legend_handles_labels()
ax1.legend(lines1 + lines2, labels1 + labels2, loc='upper right')

plt.title('xcentre Trend with Class=1 Markers')
plt.show()

关键说明

  • 双y轴设计:解决xcentre数值范围与Class的0/1范围差异问题,保证两个元素清晰显示
  • 样式自定义:可通过修改color、linewidth、alpha等参数,匹配你需要的视觉效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 14:11:29