【动态绘图】python 动态柱形图 动态折线图 bar_chart_race sjvisualizer

本文主要介绍如何使用Python的bar_chart_racesjvisualizer模块绘制动态柱形图动态折线图
关于sjvisualizer包使用详细可见【动态绘图】上

一、实验环境

1.1 操作系统及Python环境

本实验的所使用的操作系统为Windows 10 64位,Python版本为Python 3.12.4,Python编译器为Pycharm,虚拟环境为Anaconda。

1.2 必要的Python模块

本实验所必需的Python模块有:pandasbar_chart_racematplotlibrandomsjvisualizer
其中matplotlib已经在Anaconda预安装,random无需安装,其他的均需安装。
安装pandas的方法为在Pycharm中按Alt+F12进入命令行窗口,输入并运行:

pip install pandas

此包用于绘制动态柱形图:安装bar_chart_race的方法为在Pycharm中按Alt+F12进入命令行窗口,输入并运行:

pip install bar_chart_race

按上述方法安装bar_chart_race为0.1版本,0.2版本可进入 bar_chart_race Github界面 下载zip,解压后在Pycharm中按Alt+F12进入命令行窗口,输入并运行:

cd  D:\codes\bar_chart_race-master # 这里为解压后的路径
python setup.py install

以安装0.2版本。(0.2可能比0.1更稳定些,且0.2更新了line_chart_race)
注意:0.2版本中bar_chart_race.line_chart_race方法笔者调试了很久没有成果,若有调试成功的希望大佬不吝赐教。也是因为如此本文使用sjvisualizer包绘制动态折线图。

此包用于绘制动态折线图安装sjvisualizer的方法为在Pycharm中按Alt+F12进入命令行窗口,输入并运行:

pip install pan sjvisualizer

其中生成的动态柱形图主要使用了bar_chart_race模块,动态折线图主要使用了sjvisualizer模块。

二、数据源

2.1 数据源来源

本实验采用的数据来源于国家气象科学数据中心网站,最好直接下载csv文件,动态柱形图使用了.csv文件,动态折线图主要使用了xlsx文件。若有需求可关注并私信博主获取本文对应的数据源文件。

2.2 数据预处理

动态柱形图需要数据为wide data格式。宽数据具体可参考bar_chart_race说明文档
动态柱形图使用如下代码将原数据中的日期进行排序:

1.	df = pd.read_csv("data.csv", encoding="gbk")  
2.	df = df.set_index('日期')  
3.	df.index = pd.to_datetime(df.index, format='%Y/%m/%d')  # 将索引的日期转换为日期时间格式  
4.	df_sorted = df.sort_index(ascending=True)               # 按日期升序排序  

上述预处理主要将日期转换为YYYY/mm/dd的格式(原数据可能是20200105这类数据,可参考to_datetime转换数据),并使用df_sorted文件数据作为操作对象处理。

动态折线图使用如下代码将原数据中的日期进行排序并转换为xlsx文件:

1.	df = pd.read_csv("data.csv", encoding="gbk")  
2.	df = df.set_index('date')  
3.	df.index = pd.to_datetime(df.index, format='%Y%m%d')  # 将索引的日期转换为日期时间格式  
4.	df_sorted = df.sort_index(ascending=True)               # 按日期升序排序  
5.	df_sorted.to_excel('sorted_data.xlsx')  # 如果需要保存排序后的数据到CSV文件  

由于sjvisualizer处理对象为xlsx文件,因此转换后sorted_data.xlsx作为操作对象处理,并将date转化为日期时间格式处理。

三、 使用python进行数据可视化

3.1 绘制动态柱形图

代码主要如下

1.	# -*- coding: gbk -*-  
2.	import pandas as pd  
3.	import bar_chart_race as bcr  
4.	import matplotlib.pyplot as plt  
5.	  
6.	# 预处理数据  
7.	df = pd.read_csv("data.csv", encoding="gbk")  
8.	df = df.set_index('日期')  
9.	df.index = pd.to_datetime(df.index, format='%Y/%m/%d')  # 将索引的日期转换为日期时间格式  
10.	df_sorted = df.sort_index(ascending=True)               # 按日期升序排序  
11.	  
12.	# 设置matplotlib字体  
13.	plt.rcParams['font.sans-serif'] = ['simsun']  # 用来正常显示中文标签  
14.	plt.rcParams['axes.unicode_minus'] = False    # 用来正常显示负号  
15.	  
16.	bcr.bar_chart_race(  
17.	    df_sorted,  
18.	    filename='bar.gif',  
19.	    n_bars=10,                  # 限制每个时间步中的条形数量  
20.	    title='2020各省会城市及直辖市平均气温数据',  # 添加标题  
21.	    steps_per_period=5,        # 动画平滑度(插多少帧)  
22.	    period_length=200,          # 每个年份的长度(毫秒)  
23.	    # interpolate_period=True,     # 平滑动画过渡  
24.	    fixed_order=False,   # 不使用固定顺序  
25.	    bar_kwargs={'alpha': .2, 'ec': 'black', 'lw': 3},  # 条形图属性  
26.	    fixed_max=False,  
27.	    perpendicular_bar_func='mean',  
28.	    period_template='%B %d, %Y',  
29.	    period_summary_func=lambda v, r: {'x': .95, 'y': .2,  
30.	                                      's': f'全国最高温度: {v.max():,.0f}',  
31.	                                      'ha': 'right', 'size': 11},  
32.	)

3.2 绘制动态折线图

代码主要如下

1.	# -*- coding: gbk -*-  
2.	import random  
3.	import pandas as pd  
4.	import matplotlib.pyplot as plt2  
5.	from sjvisualizer import plot as plt  
6.	# 生成随机颜色  
7.	def get_random_color():return tuple(random.randint(0, 255) for _ in range(3))  # 生成RGB颜色值  
8.	  
9.	# 数据预处理  
10.	df = pd.read_csv("data.csv", encoding="gbk")  
11.	df = df.set_index('date')  
12.	df.index = pd.to_datetime(df.index, format='%Y%m%d')  # 将索引的日期转换为日期时间格式  
13.	df_sorted = df.sort_index(ascending=True)               # 按日期升序排序  
14.	df_sorted.to_excel('sorted_data.xlsx')  # 如果需要保存排序后的数据到CSV文件  
15.	# 设置matplotlib字体  
16.	plt2.rcParams['font.sans-serif'] = ['simsun']  # 用来正常显示中文标签  
17.	plt2.rcParams['axes.unicode_minus'] = False    # 用来正常显示负号  
18.	colors = {  
19.	    "1": get_random_color(),  
20.	    "2": get_random_color(),  
21.	    "3": get_random_color(),  
22.	    "4": get_random_color(),  
23.	    "5": get_random_color(),  
24.	    "6": get_random_color(),  
25.	    "7": get_random_color(),  
26.	    "8": get_random_color(),  
27.	    "9": get_random_color(),  
28.	    "10": get_random_color(),  
29.	    "11": get_random_color(),  
30.	    "12": get_random_color(),  
31.	    "13": get_random_color()  
32.	}  
33.	  
34.	plt.line(excel="sorted_data.xlsx",  
35.	         title="data",  
36.	         duration=0.2,  
37.	         fps=30,  
38.	         record='True',  
39.	         output_video='line.mp4',  
40.	         time_indicator='day',  
41.	         colors=colors  
42.	         )  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值