如何用Matplotlib在单图中展示股票交易全量数据?
单图展示所有股票交易字段的Matplotlib方案
核心思路
将股票名称+日期作为复合x轴标签,用分组条形图区分不同操作类型(Action)的交易量(Quantity),同时用副轴展示交易占比(Traded %),实现单图呈现所有字段信息。
实现代码
import matplotlib.pyplot as plt import pandas as pd # 预处理日期字段,转为可读字符串 df['Date'] = pd.to_datetime(df['Date']).dt.strftime('%Y-%m-%d') # 生成复合x轴标签:股票名称+日期 df['Stock_Date'] = df['Stock'] + '\n' + df['Date'] # 初始化画布和主轴 plt.style.use('seaborn-v0_8') fig, ax = plt.subplots(figsize=(18, 10)) # 按操作类型分组绘制交易量条形图 action_types = df['Action'].unique() bar_width = 0.25 x_base = range(len(df['Stock_Date'].unique())) for idx, action in enumerate(action_types): subset = df[df['Action'] == action] ax.bar([pos + idx*bar_width for pos in x_base], subset['Quantity'], width=bar_width, label=f'操作类型: {action}') # 绘制交易占比副轴 ax2 = ax.twinx() # 让折线点对齐每组条形的中间位置 ax2.plot([pos + bar_width*(len(action_types)-1)/2 for pos in x_base], df['Traded %'], color='black', marker='o', linestyle='--', label='交易占比') # 设置轴标签与标题 ax.set_xlabel('股票名称+日期', fontsize=14) ax.set_ylabel('交易量', fontsize=14, color='olivedrab') ax2.set_ylabel('交易占比(%)', fontsize=14, color='black') ax.set_title('股票交易详情:交易量、操作类型、日期及交易占比', fontsize=16) # 配置x轴刻度与标签 ax.set_xticks([pos + bar_width*(len(action_types)-1)/2 for pos in x_base]) ax.set_xticklabels(df['Stock_Date'].unique(), fontsize=12, rotation=45) # 合并双轴图例 lines1, labels1 = ax.get_legend_handles_labels() lines2, labels2 = ax2.get_legend_handles_labels() ax.legend(lines1 + lines2, labels1 + labels2, loc='upper left') # 调整布局防止标签截断 plt.tight_layout() plt.show()
代码说明
- 复合x轴标签:通过拼接股票名称和日期,让x轴同时展示两个关键字段。
- 分组条形区分操作类型:针对不同操作类型设置不同条形位置,清晰区分同一只股票在同一日期的不同操作。
- 副轴对齐优化:让交易占比的折线点对齐每组条形的中间,提升视觉协调性。
- 样式调整:通过调整标签大小、旋转角度和布局,避免内容重叠,增强可读性。
内容的提问来源于stack exchange,提问作者leoin86
相关产品推荐
相关产品推荐

