Press "Enter" to skip to content

使用python绘制一个A股的历史趋势图

我们拿到的A股历史趋势数据为:

日期	收盘	开盘	高	低	交易量	涨跌幅
2024/2/1	2,735.12	2,773.42	2,804.77	2,666.58	35.29B	-1.92%
2024/1/1	2,788.55	2,972.77	2,976.27	2,724.16	692.52B	-6.27%
2023/12/1	2,974.93	3,027.35	3,038.98	2,882.02	605.86B	-1.81%
2023/11/1	3,029.67	3,038.18	3,089.77	3,009.12	649.43B	0.36%
2023/10/1	3,018.77	3,100.00	3,109.99	2,923.51	

想绘制一个历史变化的趋势图,简单使用python脚本来实现:

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from matplotlib.ticker import FuncFormatter

plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置字体为SimHei显示中文
plt.rcParams['axes.unicode_minus'] = False  # 解决负号'-'显示为方块的问题

# 加载数据
data = pd.read_excel('./A股.xlsx')  # 请将路径替换为实际文件的路径

# 数据预处理
data['日期'] = pd.to_datetime(data['日期'])  # 转换日期列为日期格式
data['交易量数值'] = data['交易量'].str.replace(',', '').str.replace('B', '').astype(float) * 1e9  # 转换交易量为数值类型

# 定义十亿格式化函数
def billion_formatter(x, pos):
    return '%1.1fB' % (x * 1e-9)

# 绘制图表
fig, ax1 = plt.subplots(figsize=(14, 8))

# 价格数据
ax1.set_xlabel('日期')
ax1.set_ylabel('价格', color='tab:blue')
ax1.plot(data['日期'], data['收盘'], label='收盘价', color='tab:blue')
ax1.plot(data['日期'], data['开盘'], label='开盘价', color='tab:orange', alpha=0.6)
ax1.plot(data['日期'], data['高'], label='最高价', color='tab:green', alpha=0.3)
ax1.plot(data['日期'], data['低'], label='最低价', color='tab:red', alpha=0.3)
ax1.tick_params(axis='y', labelcolor='tab:blue')
ax1.legend(loc='upper left')

# 设置x轴的主要定位器和格式化程序
ax1.xaxis.set_major_locator(mdates.MonthLocator())
ax1.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m'))

# 添加第二个y轴来绘制交易量
ax2 = ax1.twinx()
ax2.set_ylabel('交易量', color='tab:purple')
ax2.bar(data['日期'], data['交易量数值'], width=20, alpha=0.2, color='tab:purple')
ax2.tick_params(axis='y', labelcolor='tab:purple')
ax2.yaxis.set_major_formatter(FuncFormatter(billion_formatter))

plt.xticks(rotation=45)
plt.title('A股历史趋势分析')

plt.tight_layout()  # 调整布局,防止重叠
plt.show()
发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注