首页 > 编程语言 >【动态绘图】python 动态柱形图 动态折线图 bar_chart_race sjvisualizer

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

时间:2024-10-24 20:45:49浏览次数:10  
标签:index bar python random chart df race 动态

本文主要介绍如何使用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.	         )  

标签:index,bar,python,random,chart,df,race,动态
From: https://blog.csdn.net/qq_41982015/article/details/142833250

相关文章

  • 【Azure Function】Python Function部署到Azure后报错No module named '_cffi_backend
    问题描述本地使用Python编写的FunctionApp,发布到AzureFunction后,出现 _cffi_backendmodule无法找到的报错。ERROR:Error:Nomodulenamed'_cffi_backend',Cannotfindmodule.Pleasechecktherequirements.txtfileforthemissingmodule.Formoreinfo,plea......
  • 【Python入门】7天速成Python网络爬虫高手,urllib从零基础到实战只需一篇
    ......
  • python: Parent-child form operations
     #encoding:utf-8#版權所有2024©塗聚文有限公司#許可資訊查看:言語成了邀功的功臣,還需要行爲每日來值班嗎?#描述:主、子表單窗體傳值Parent-childformoperations#Author:geovindu,GeovinDu塗聚文.#IDE:PyCharm2023.1python3.11#OS......
  • Vue.js 投票排行榜:从零到完整实现详细教程” “新手友好:使用 Vue.js 构建一个实时投票
    效果图博客教程:使用Vue.js实现投票排行榜页面(详细步骤)在本篇博客教程中,我们将逐步带你实现一个投票排行榜页面,使用的是Vue.js框架。此项目适合前端开发新手,可以帮助你更好地理解Vue的基本功能和组件开发。目录项目介绍搭建项目基础结构实现榜单前3名展示实现倒计时功......
  • python实战(二)——房屋价格回归建模
    一、任务背景    本章将使用一个经典的Kaggle数据集——HousePrices-AdvancedRegressionTechniques进行回归建模的讲解。这是一个房价数据集,与我们熟知的波士顿房价数据集类似,但是特征数量要更多,数据也要更为复杂一些。下面,我们将使用这个房价数据进行机器学习中......
  • 使用PyInstaller将Python代码打包为.exe可执行程序(一)
    一、简介PyInstaller是一个用于将Python程序打包成独立可执行文件(如.exe文件用于Windows系统、.app文件用于Mac系统等)的第三方库。它能够把Python脚本及其所依赖的库文件、资源文件等打包到一个单独的文件中,这样可以方便地将程序分发给其他用户,而无需用户在其机器......
  • Python环境及pip镜像等
    环境管理工具venv安装python3.3版本之后自带,无需安装使用创建环境python3-mvenv/path/to/env_name激活环境cd/path/to/env_name&&source./bin/activate退出环境deactivate环境管理工具virtualenv安装pipinstallvirtualenv创建及使用环境#创建一个......
  • Python小白学习教程从入门到入坑------第十四课 函数基础(语法基础)
    一、函数def定义:将具有独立功能的代码块组织成一个整体,使其具有特殊功能的代码集作用:使用函数可以加强代码的复用性,提高编程续写的效率结构:def 函数名():     函数体注意:函数名要符合标识符规定,最好见名知意,调用函数前,必须保证函数已经存在eg:#1.定义函数#......
  • python爬虫遇到的问题
    python爬虫之获取文本信息时,经常犯的错误如果代码部分不想看的可以直接看后面粗体字1.第一个例子importrequestsfrombs4importBeautifulSoupimportpandasaspdimporttime importrandomheaders={  'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64......
  • python32位和64位的区别是什么
    python32位和64位有什么区别?64位能够用更大的内存空间,64位可以在64位的系统下运行,但是不能在32位系统下运行。32位能够在32位和64位上运行,考虑到兼容性,建议使用32位的python。如何查看python是32位还是64位可使用IDLE或者CMD查看。方法一:打开IDLE,看第一行提示,例如:32位......