从 multi_stock_data.csv 中选择平均交易量前五的股票,使用柱状图表示每支股票的交易量,并为每根柱子标出具体的数值。 创建一个双轴图表,左侧 y 轴表示某支股票的每日收盘价(折线图),右侧 y 轴表示其每日交易量(柱状图),选择过去 30 天的数据来绘制图表
时间: 2024-11-22 19:45:27 浏览: 13
首先,我们需要加载`multi_stock_data.csv`数据,计算每支股票的交易量平均值,并根据平均交易量排序选取前五名。接下来,我们将使用matplotlib库创建所需的图形。
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import host_subplot
import mpl_toolkits.axisartist.axislines as axislines
# 加载数据
df = pd.read_csv('multi_stock_data.csv')
# 计算每支股票的交易量平均值
average_volume = df.groupby('ts_code')['volume'].mean().sort_values(ascending=False)[:5]
# 选择前五名股票的交易量数据
selected_stocks = average_volume.index.tolist()
# 创建数据框,只包含选定股票过去30天的数据
past_30_days = df[(df['ts_code'].isin(selected_stocks)) & (df['date'] >= df['date'].max() - pd.DateOffset(days=30))]
# 双轴图表
fig = plt.figure(figsize=(10, 7))
host = host_subplot(111)
ax2 = host.twinx()
for stock in selected_stocks:
daily_closing_prices = past_30_days[past_30_days['ts_code'] == stock]['close_price']
daily_volume = past_30_days[past_30_days['ts_code'] == stock]['volume']
host.set_xlabel("日期")
host.set_ylabel(f"{stock}收盘价", color='blue')
ax2.set_ylabel(f"{stock}交易量", color='green')
# 折线图
host.plot(daily_closing_prices.index, daily_closing_prices.values, label=stock + '收盘价', color='blue')
# 柱状图
ax2.bar(daily_closing_prices.index, daily_volume.values, width=1, alpha=0.5, label=stock + '交易量', color='green')
# 标记每根柱子的具体数值
for i, vol in enumerate(ax2.patches):
ax2.text(vol.get_x() + vol.get_width() / 2., vol.get_height(), int(vol.get_height()), ha='center', va='bottom')
host.yaxis.label.set_color('blue')
ax2.yaxis.label.set_color('green')
plt.xticks(rotation=45) # 旋转x轴标签以避免重叠
legend = host.legend(loc="upper left")
host.axis["left"].set_axisline_style("-|>")
host.axis["right"].set_axisline_style("-|>")
host.axis["top"].set_visible(False)
host.axis["bottom"].set_label_position("zero") # 将底部y轴刻度标签置于零线上方
plt.show()
```
这个代码首先计算每支股票的平均交易量,然后选择前五名股票进行30天内的数据处理。双轴图表中,左侧是收盘价的折线图,右侧是交易量的柱状图,每个柱子都标注了具体的数值。通过mpl_toolkits中的功能,调整了两条y轴的样式以便区分。
阅读全文