使用python生成一个月度账单消费金额折线图表

  1. 阿里云月度账单
  2. 根据月份、消费金额(可开票)生成一个折线图表
import pandas as pd
import matplotlib.pyplot as plt
import os
from calendar import month_abbr

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用于显示中文的宋体

# 获取当前工作目录下所有CSV文件
csv_files = [file for file in os.listdir() if file.endswith('.csv')]

# 创建一个图表
fig, ax = plt.subplots(figsize=(10, 6))

# 逐个读取CSV文件并绘制图表
for file in csv_files:
    # 读取CSV文件
    df = pd.read_csv(file)

    # 将“账期”列转换为日期格式,并获取月份的简写形式
    df['账期'] = pd.to_datetime(df['账期'].str.strip(), format='%Y-%m')
    df['月份'] = df['账期'].dt.month.map(lambda x: month_abbr[x])

    # 将NaN值替换为0
    df['消费(可开票)'] = df['消费(可开票)'].fillna(0)

    # 检查J列的值是否全为0
    if not (df['消费(可开票)'] == 0).all():
        # 绘制折线图
        line = ax.plot(df['账期'], df['消费(可开票)'], label=file[:-4], marker='o')[0]  # 添加marker以突出点

        # 在每个数据点上添加文本标签(跳过值为0的点)
        # for i, txt in enumerate(df['消费(可开票)']):
        #     if txt != 0:
        #         ax.annotate(f'{txt:.2f}', (df['账期'].iloc[i], df['消费(可开票)'].iloc[i]),
        #                     textcoords="offset points", xytext=(0, 0), ha='center', rotation=65)

# 设置图表标题和标签
ax.set_title('年度账单消费情况(阿里云)')
ax.set_xlabel('月份')
ax.set_ylabel('消费(可开票)')

# 将Y轴范围设置从0开始
ax.set_ylim(bottom=0)

# 使用自定义 x 轴标签
ax.set_xticks(df['账期'])
ax.set_xticklabels(df['月份'])

# 在每个Y轴刻度位置添加细灰色虚线
for y_tick in ax.get_yticks():
    ax.hlines(y=y_tick, xmin=df['账期'].min(), xmax=df['账期'].max(), colors='gray', linestyles='dashed', alpha=0.5, linewidth=0.5)

# 添加图例
ax.legend()

# 在每个数据点上添加文本标签
# for i, txt in enumerate(df['消费(可开票)']):
#     if txt != 0:
#         ax.annotate(f'{txt:.2f}', (df['账期'].iloc[i], df['消费(可开票)'].iloc[i]),
#                     textcoords="offset points", xytext=(0, 10), ha='center', rotation=45)

# 保存图表到本地
plt.savefig('line_chart.png')

# 显示图表
plt.show()

你可能感兴趣的:(python,开发语言)