如何基于现有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
相关产品推荐
相关产品推荐

