如果Excel文件的命名规则不同,并且它们不在Python脚本的当前工作目录下,你需要相应地调整代码来适应这些变化。以下是一个更通用的方法,用于读取不同命名规则的Excel文件,并在不同的目录中查找这些文件。
首先,我们需要一个函数来读取一个省份的所有年份的GDP数据,然后将其合并到一个DataFrame中,最后使用FuncAnimation
来创建动画。
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import numpy as np
import os
def read_gdp_data(province, directory):
"""
读取一个省份在指定目录下的所有年份的GDP数据。
参数:
- province: 省份名称
- directory: Excel文件所在的目录
返回:
- pandas DataFrame 包含该省份所有年份的GDP数据
"""
files = [os.path.join(directory, f) for f in os.listdir(directory) if f.startswith(province)]
gdp_data = pd.DataFrame()
for file in files:
data = pd.read_excel(file)
gdp_data = pd.concat([gdp_data, data], ignore_index=True)
return gdp_data
def update(frame):
# 根据年份选择数据
year = frame
data = all_data[all_data['省份'] == year]
# 对GDP数据进行排序
sorted_data = data.sort_values(by='GDP', ascending=False)
# 更新条形图中的数据
for i, (index, row) in enumerate(sorted_data.iterrows()):
bars[index, year - 2012] = row['GDP']
# 设置y轴的上限为当前年份的GDP的最大值
ax.set_ylim(0, sorted_data['GDP'].max() * 1.1)
# 假设我们有10个省份的数据
provinces = ['province1', 'province2', ..., 'province10'] # 替换为实际省份名
directory = 'path_to_your_excel_files' # 替换为实际的目录路径
# 初始化一个足够大的数组来存储GDP数据
all_data = np.zeros((len(provinces), 10)) # 10年的数据
# 读取每个省份的数据并填充到数组中
for i, province in enumerate(provinces):
province_data = read_gdp_data(province, directory)
all_data[i, :] = province_data['GDP'].values
# 创建条形图和动画
fig, ax = plt.subplots()
bars = ax.bar(np.arange(len(provinces)), all_data[:, 0], color='skyblue')
# 初始状态设置
ax.set_ylim(0, all_data[:, 0].max() * 1.1)
ax.set_xlabel('Province')
ax.set_ylabel('GDP')
ax.set_title('GDP Ranking in 2012')
ax.set_xticks(np.arange(len(provinces)))
ax.set_xticklabels(provinces, rotation=45, ha='right')
# 创建动画
ani = FuncAnimation(fig, update, frames=range(2012, 2023), blit=True)
plt.tight_layout()
plt.show()
在这个示例中,你需要将provinces
列表替换为你的省份名称,将directory
变量替换为你的Excel文件所在的目录路径。
这段代码中的read_gdp_data
函数读取指定省份的所有Excel文件,并将它们合并成一个DataFrame。update
函数用于更新动画的每一帧。我们使用FuncAnimation
来创建动画,并在每一帧中调用update
函数。
请确保你的Excel文件包含正确的列,如省份名称、年份和GDP数据,并且这些列的名称在代码中正确反映。此外,你可能需要根据实际的文件结构和数据格式调整代码。