python matplotlib+pandas+seaborn 绘制基于大量数据处理后的柱状图及折线图 关联数据建模不同时间段不同日期分拣中心货量总和对比图

本文分享了如何使用Python的matplotlib库,结合Pandas处理数据,以实际的分拣中心货量数据为例,展示如何绘制柱状图和折线图进行时间段和日期区间的货量总和对比。这对于数学建模比赛中的数据可视化非常实用。
摘要由CSDN通过智能技术生成

         

        作者在无意间发现网上基于matplotlib的python库有关绘制各类型图标的教程质量参差不齐,大多都是重复度极高的文档搬运。

         图表绘制+数据处理使人焦头烂额,但这又是各类数学建模比赛中常会遇见的需求场景。

        故列出基于最近参加的数学建模中的实际应用举例,以下代码为统计不同时间段不同日期中各分拣中心的货量总和对比,可用于相似问题的图表绘制,作为总体预览对比图十分好用。

        

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from matplotlib.ticker import MaxNLocator

# 设置中文字体,确保中文可以正常显示
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 读取CSV文件内容到DataFrame

data = pd.read_csv('1.csv')

# 将时间转换为Pandas的datetime格式

data['time'] = pd.to_datetime(data['time'])

# 1. 统计不同物流中心,不同时间段的货量总和

grouped_by_center_and_hour = data.groupby(['name', 'hours'])['goods'].sum().reset_index()

# 绘制柱状图
fig1, ax1 = plt.subplots(figsize=(20, 8))  # 创建一个新的figure对象

sns.barplot(x='hours', y='goods', hue='name', data=grouped_by_center_and_hour, ax=ax1, palette="tab20")

ax1.set_title('各分拣中心不同时间段货量总和对比图')

ax1.set_xlabel('时间段 (小时)')

ax1.set_ylabel('货量总和')

ax1.xaxis.set_major_locator(MaxNLocator(integer=True))

# 将图例绘制在右上角,并分为三列

handles, labels = ax1.get_legend_handles_labels()

# 微调图例的位置,使其位于右上角的空白处

bbox_to_anchor = (1.0, 0.7)  # (x1, y1) in fraction of axes

# 由于图例默认是相对于图表的,我们需要将其调整到相对于图表外的右上角
# 这里我们将图例的x坐标和y坐标都设置为1.1,稍微超出图表范围,以便放在右上角

ax1.legend(handles, labels, loc='center left', bbox_to_anchor=bbox_to_anchor, ncol=3, framealpha=0.5)

# 显示柱状图
plt.show()

# 2. 统计不同物流中心,不同日期的货量总和

grouped_by_center_and_date = data.groupby(['name', pd.Grouper(key='time', freq='D')])['goods'].sum().reset_index()

# 绘制折线图

fig2, ax2 = plt.subplots(figsize=(20, 8))  # 创建另一个新的figure对象

sns.lineplot(x='time', y='goods', hue='name', data=grouped_by_center_and_date, marker='o', ax=ax2, palette="tab20")

ax2.set_title('各分拣中心不同日期区间货量总和对比图')
ax2.set_xlabel('日期')

ax2.set_ylabel('货量总和')

# 将图例绘制在右上角,并分为三列

handles, labels = ax2.get_legend_handles_la
bels()
# 微调图例的位置,使其位于右上角的空白处
bbox_to_anchor = (1.0, 0.7)

ax2.legend(handles, labels, loc='center left', bbox_to_anchor=bbox_to_anchor, ncol=3, framealpha=0.5)

# 显示折线图
plt.show()

代码运行示意图: 

(这个图画的我十分满意,坐标清晰,图例清楚,太赏心悦目了)

csv部分图表数据:

        以上代码稍微修修补补就可以用于各种数学建模中要求统计对比数据的场景。

        各位cv工程师看完觉得有用记得留个赞~   ;)

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值