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

如何基于现有GroupBy结果分组,遍历标的与交易所绘制价格-规模图?

实现按标的+交易所分组绘制价格-规模图表的方案

嘿,这需求很清晰!咱们一步步来搞定它,从数据处理到绘图都给你安排明白:

第一步:把分组结果转成易处理的DataFrame

你现在的df_group是一个多级索引的Series,索引是symbol、exchange、price,值是求和后的size。为了后续方便筛选和绘图,咱们先把它转成标准的DataFrame:

# 将多级索引的Series转换为带列名的DataFrame
df_grouped = df_group.reset_index()
# 此时df_grouped的列是:symbol, exchange, price, size

第二步:获取所有唯一的标的+交易所组合

咱们需要确保每个symbol+exchange的配对只绘制一次图表,所以先提取所有唯一的配对:

# 获取所有不重复的(symbol, exchange)组合
unique_pairs = df_grouped[['symbol', 'exchange']].drop_duplicates().values.tolist()

第三步:遍历配对并绘制图表

这里用Python最常用的matplotlib库来绘图,你可以根据需求选择图表类型(折线图、柱状图、散点图都可以)。下面是完整的遍历绘图代码:

import matplotlib.pyplot as plt

# 遍历每个标的+交易所组合
for symbol, exchange in unique_pairs:
    # 筛选当前组合的对应数据
    data_subset = df_grouped[(df_grouped['symbol'] == symbol) & (df_grouped['exchange'] == exchange)]
    
    # 创建新的画布,设置尺寸
    plt.figure(figsize=(8, 5))
    
    # 绘制折线图(带标记点,更直观),你也可以换成plt.bar做柱状图,plt.scatter做散点图
    plt.plot(data_subset['price'], data_subset['size'], marker='o', linestyle='-', color='#1f77b4', linewidth=2)
    
    # 设置图表的标题、坐标轴标签
    plt.title(f'Total Size vs Price: {symbol} on {exchange}', fontsize=12, pad=15)
    plt.xlabel('Price', fontsize=10)
    plt.ylabel('Total Size', fontsize=10)
    
    # 添加网格线,提升可读性
    plt.grid(True, alpha=0.3)
    
    # 显示图表(如果要保存可以用plt.savefig(f'{symbol}_{exchange}_chart.png'))
    plt.show()

更简洁的分面绘图方案(可选)

如果你不想手动遍历,用seaborn库的分面绘图功能可以一键生成所有组合的图表,代码更简洁:

import seaborn as sns

# 自动按symbol和exchange分面,绘制折线图
sns.relplot(
    data=df_grouped,
    x='price',
    y='size',
    col='symbol',  # 按symbol分列
    row='exchange',  # 按exchange分行
    kind='line',
    marker='o',
    height=4,
    aspect=1.2
)
plt.show()

小提示

  • 如果你的price是离散的数值,用柱状图(plt.bar)会更合适;如果是连续变化的,折线图或散点图更直观。
  • 可以根据需求调整图表的颜色、标记样式、尺寸等参数,让图表更符合你的展示需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:28:04