Python代码分解:从数据读取到图表优化

代码分解说明(对照你的课本理解)

1. 基础准备部分

import pandas as pd
import matplotlib.pyplot as plt

# 设置中文显示(Windows系统)
plt.rcParams['font.sans-serif'] = ['SimHei']  # 让图表能显示中文
plt.rcParams['axes.unicode_minus'] = False    # 解决负号"-"显示为方块的问题
  • 类比:就像你要写作业,先准备好笔和纸(导入库),再调整纸张格式让中文字能写清楚(设置字体)。

  • 常见问题:如果不设置中文,图表中的中文会显示为小方块。


2. 读取数据部分

file_path = r"自己保存的位置\医院药品销售数据.xlsx"
df = pd.read_excel(file_path, sheet_name='按月份的销售额汇总')
  • 作用:从Excel文件中读取数据

  • 比喻:就像打开一个Excel文件,找到名叫"按月份的销售额汇总"的工作表

  • 参数说明

    • r"路径"r表示防止路径中的\被转义(比如\n会被认为是换行符)

    • sheet_name:指定要读取的工作表名称


3. 创建画布

fig, ax = plt.subplots(figsize=(12, 6))  # 调整画布尺寸
  • 比喻:准备一张画纸(fig是整张画纸,ax是画纸上的绘图区域)

  • 参数

    • figsize=(12,6):画布尺寸为12英寸宽、6英寸高(1英寸≈2.54厘米)

  • 对比理解

    • 旧代码的plt.plot()是快速画图,但控制细节不方便

    • 新代码的ax对象可以精细控制每一个图表元素


4. 绘制折线图

line = ax.plot(
    df['月份'],         # X轴数据
    df['销售金额'],     # Y轴数据
    color='#2B7FC3',    # 线条颜色(蓝色)
    linewidth=2,        # 线宽
    marker='o',         # 数据点标记为圆形
    markersize=8,       # 标记大小
    markerfacecolor='white',  # 标记内部颜色
    markeredgewidth=2,  # 标记边框粗细
    label='月销售额'     # 图例标签
)
  • 可视化效果:你会看到一条蓝色折线,每个数据点有白色圆点标记

  • 关键参数

    • marker:可以换成^(三角形)、s(方形)等

    • label:后续图例显示的文本


5. 添加图表元素

ax.set_title('2023年度药品销售趋势分析', fontsize=16, pad=20)  # 标题
ax.set_xlabel('月份', fontsize=12)  # X轴标签
ax.set_ylabel('销售金额(元)', fontsize=12)  # Y轴标签

效果

|---------------- 标题 ----------------|
|                                      |
|  销售金额(元)                      |
|     ▲                               |
|     │                               |
|     └───────────────────────────────►
|                                  月份

6. 设置坐标轴刻度

ax.set_xticks(df['月份'])  # 设置X轴刻度位置
# 将数字月份转换为"1月"、"2月"格式,并旋转45度防重叠
ax.set_xticklabels([f'{int(month)}月' for month in df['月份']], rotation=45)
ax.tick_params(axis='both', labelsize=10)  # 统一设置刻度标签大小
  • 重点理解

    • set_xticks:确定刻度线位置(比如1月的位置在X轴1的位置)

    • set_xticklabels:自定义显示的文本内容

    • rotation=45:防止月份文字拥挤重叠


7. 其他优化功能

# 网格线
ax.grid(True, linestyle='--', linewidth=0.5, alpha=0.6, color='gray')

# 突出显示最高/最低点(带箭头标注)
# 保存图片优化
plt.savefig('文件名.png', dpi=300, bbox_inches='tight', facecolor='white')
  • 网格线参数

    • linestyle='--':虚线样式

    • alpha=0.6:透明度(1为完全不透明)

  • 保存图片

    • dpi=300:高分辨率保存(适合打印)

    • bbox_inches='tight':去除图片周围的白边


      完整代码

import pandas as pd
import matplotlib.pyplot as plt

# 设置中文显示(Windows系统)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 1. 数据读取优化(建议使用相对路径)
file_path = r"D:\Python\python学习\医院药品销售数据.xlsx"
df = pd.read_excel(file_path, sheet_name='按月份的销售额汇总')

# 2. 创建画布和坐标轴对象(面向对象方式)
fig, ax = plt.subplots(figsize=(12, 6))  # 调整画布尺寸

# 3. 绘制折线图并优化样式
line = ax.plot(
    df['月份'],
    df['销售金额'],
    color='#2B7FC3',    # 使用品牌蓝色
    linewidth=2,
    marker='o',         # 添加数据点标记
    markersize=8,
    markerfacecolor='white',
    markeredgewidth=2,
    label='月销售额'
)

# 4. 添加图表元素
ax.set_title('2023年度药品销售趋势分析', fontsize=16, pad=20)
ax.set_xlabel('月份', fontsize=12)
ax.set_ylabel('销售金额(元)', fontsize=12)

# 5. 设置坐标轴刻度
ax.set_xticks(df['月份'])
ax.set_xticklabels([f'{int(month)}月' for month in df['月份']], rotation=45)  # 转换为中文月份标签
ax.tick_params(axis='both', labelsize=10)

# 6. 添加网格线
ax.grid(True, 
        linestyle='--', 
        linewidth=0.5,
        alpha=0.6,
        color='gray')

# 7. 突出显示极值点
max_val = df['销售金额'].max()
min_val = df['销售金额'].min()
for idx, row in df.iterrows():
    if row['销售金额'] == max_val:
        ax.annotate(f'最高点: {max_val:,.2f}',
                   (row['月份'], max_val),
                   xytext=(15, 15),
                   textcoords='offset points',
                   arrowprops=dict(arrowstyle='->', color='red'),
                   color='red')
    elif row['销售金额'] == min_val:
        ax.annotate(f'最低点: {min_val:,.2f}',
                   (row['月份'], min_val),
                   xytext=(-15, -30),
                   textcoords='offset points',
                   arrowprops=dict(arrowstyle='->', color='green'),
                   color='green')

# 8. 添加图例
ax.legend(loc='upper left', fontsize=10)

# 9. 自动调整布局
plt.tight_layout()

# 10. 保存图片优化
save_path = '按月份的销售额_优化版.png'
plt.savefig(
    save_path,
    dpi=300,          # 提高分辨率
    bbox_inches='tight',  # 去除多余白边
    facecolor='white'     # 设置背景色
)

# 11. 显示图表(可选)
plt.show()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值