如何使用matplotlib绘制动态柱状图-python

简介: 如何使用matplotlib绘制动态柱状图-python

这期博客,我们来学习一下,如何使用python的matplotlib绘制动态的柱状图,机缘巧合之后,导师让我替他绘制一个动态的柱状图,然后在一天的努力下,我速成了一下这个动态柱状图,在这里把代码和方法开源出来,万一以后大家的导师也让画,可以参考我的方法。


竖着的柱状图绘图代码:

横着的柱状图绘图代码:

以上海疫情的发展为例,先将疫情的发展数字做成excel表格,然后用python读取数据,横坐标 和 纵坐标分别问新增确认人数和新增无症状人数,动态的变量为日期。


B站视频演示链接


如何使用matplotlib绘制动态柱状图-python_哔哩哔哩_bilibili


总体思路很简单,动态的意义是延时输出新图片,我们将这个日期作为第三维的时间变量,不停的进行延时更新图片进行输出,即可得到动态的可视化效果。


延时的和核心代码,在这里:


data是第三维的动态变量,plt.pause是延时,每次图片存在的时间

date = ['2022年3月4日', '2022年3月5日', '2022年3月6日', '2022年3月7日',
        '2022年3月8日', '2022年3月9日', '2022年3月10日', '2022年3月11日', '2022年3月12日',
        '2022年3月13日', '2022年3月14日', '2022年3月15日', '2022年3月16日','2022年3月17日',
        '2022年3月18日','2022年3月19日', '2022年3月20日', '2022年3月21日',
       '2022年3月22日', '2022年3月23日', '2022年3月24日', '2022年3月25日', '2022年3月26日', '2022年3月27日',
        '2022年3月28日', '2022年3月29日', '2022年3月30日', '2022年3月31日', '2022年4月1日'
    ,'2022年4月2日', '2022年4月3日', '2022年4月4日'
    , '2022年4月5日', '2022年4月6日', '2022年4月7日']
for i in range(35):#动态的意义是延时输出图片
    plt.pause(0.1) #延时,每次图片播放的时间填多少就是多少,单位为秒
plt.show()


还有这个清除函数很重要,你需要要清除之前的才能画新的,不然会乱。


plt.cla()#清除当前的图片,重新画新的

除了这两个是关键的,其他的代码就都是画图的常规代码了,看不懂的直接百度就行了。


横向动态柱状图:


image.png


纵向柱状图:


image.png


主要是CSDN不能上传视频到博客,做成的GIF动图效果又差的一批,那我这里把动态的视频放到我的B站,大家看效果可以点击链接直接观看。一般都是用python做好动态图,然后录屏再做成GIF动图,不过当日我导师要的是视频,然后让我剪辑加上音乐的。


B站视频演示链接


如何使用matplotlib绘制动态柱状图-python_哔哩哔哩_bilibili


首先是我采集的数据:


image.png


后来发现数据这样排列,不例如python的提取,我就稍微修改了一下,去掉了title,改成了如下的样子,方便我们使用pandas库进行提取。


image.png


竖着的柱状图绘图代码:

import pandas as pd
from matplotlib import pyplot as plt
df1 = pd.read_excel("data - 1.xlsx")#从文件夹提取我们需要的内容
# print(df1)   #打印出来看看
date = df1['日期']   #提取的抬头
y1 = df1['新增确诊人数']
y2 = df1['新增无症状人数']
y3 = df1['治愈人数']
date = ['2022年3月4日', '2022年3月5日', '2022年3月6日', '2022年3月7日',
        '2022年3月8日', '2022年3月9日', '2022年3月10日', '2022年3月11日', '2022年3月12日',
        '2022年3月13日', '2022年3月14日', '2022年3月15日', '2022年3月16日','2022年3月17日',
        '2022年3月18日','2022年3月19日', '2022年3月20日', '2022年3月21日',
       '2022年3月22日', '2022年3月23日', '2022年3月24日', '2022年3月25日', '2022年3月26日', '2022年3月27日',
        '2022年3月28日', '2022年3月29日', '2022年3月30日', '2022年3月31日', '2022年4月1日'
    ,'2022年4月2日', '2022年4月3日', '2022年4月4日'
    , '2022年4月5日', '2022年4月6日', '2022年4月7日']
print(len(date))
y1 = list(y1)
y2 = list(y2)
y3 = list(y3)
print(y1)
print(y2)
print(y3)
plt.rcParams["font.sans-serif"] = ['SimHei'] #方便汉语
plt.rcParams["axes.unicode_minus"] = False
plt.figure()
for i in range(35):#动态的意义是延时输出图片
    plt.cla()#清除当前的图片,重新画新的
    title = ['新增确诊人数' , '新增无症状人数' ]
    p1 = plt.bar(title[0], y1[i] , width=0.3 , color= 'lightcoral' )#标题的设置
    p2 = plt.bar(title[1], y2[i] , width=0.3 ,color='turquoise' )
    plt.bar_label(p1, label_type='edge', fontsize=12) #柱状图上面的小标题
    plt.bar_label(p2, label_type='edge', fontsize=12)
    plt.title(date[i] ,  fontsize=20)  #柱状图上面的大标题
    plt.ylim(0, 1000) #坐标
    if y1[i]>1000 or y2[i] >1000: #老师让做动态坐标,在播放的过程中坐标会发生变化
        plt.ylim(0, 21000)
    else:
        plt.ylim(0, 1000)
    # plt.ylabel("新增人数", fontsize=20)
    plt.xticks(fontsize=10)
    plt.pause(0.1) #延时,每次图片播放的时间填多少就是多少,单位为秒
plt.show()


横着的柱状图绘图代码:

import pandas as pd
from matplotlib import pyplot as plt
df1 = pd.read_excel("data - 1.xlsx")
# print(df1)
date = df1['日期']
y1 = df1['新增确诊人数']
y2 = df1['新增无症状人数']
y3 = df1['治愈人数']
date = ['2022年3月4日上海市疫情发展趋势', '2022年3月5日上海市疫情发展趋势', '2022年3月6日上海市疫情发展趋势', '2022年3月7日上海市疫情发展趋势',
        '2022年3月8日上海市疫情发展趋势', '2022年3月9日上海市疫情发展趋势', '2022年3月10日上海市疫情发展趋势', '2022年3月11日上海市疫情发展趋势', '2022年3月12日上海市疫情发展趋势',
        '2022年3月13日上海市疫情发展趋势', '2022年3月14日上海市疫情发展趋势', '2022年3月15日上海市疫情发展趋势', '2022年3月16日上海市疫情发展趋势','2022年3月17日上海市疫情发展趋势',
        '2022年3月18日上海市疫情发展趋势','2022年3月19日上海市疫情发展趋势', '2022年3月20日上海市疫情发展趋势', '2022年3月21日上海市疫情发展趋势',
       '2022年3月22日上海市疫情发展趋势', '2022年3月23日上海市疫情发展趋势', '2022年3月24日上海市疫情发展趋势', '2022年3月25日上海市疫情发展趋势', '2022年3月26日上海市疫情发展趋势', '2022年3月27日上海市疫情发展趋势',
        '2022年3月28日上海市疫情发展趋势', '2022年3月29日上海市疫情发展趋势', '2022年3月30日上海市疫情发展趋势', '2022年3月31日上海市疫情发展趋势', '2022年4月1日上海市疫情发展趋势'
    ,'2022年4月2日上海市疫情发展趋势', '2022年4月3日上海市疫情发展趋势', '2022年4月4日上海市疫情发展趋势'
    , '2022年4月5日上海市疫情发展趋势', '2022年4月6日上海市疫情发展趋势', '2022年4月7日上海市疫情发展趋势']
print(len(date))
y1 = list(y1)
y2 = list(y2)
y3 = list(y3)
print(y1)
print(y2)
print(y3)
ans = []
for i in range(35):
    ans.append([y1[i] , y2[i]])
print(ans)
for i in range(35):#动态的意义是延时输出图片
    plt.cla()#清除之前的图,画新的
    title = ['新增无症状人数'  ,  '新增确诊人数' ]
    plt.rcParams['font.sans-serif'] = ['SimHei'] # 显示中文
    plt.title(str(date[i]) , fontsize=30)
    b = plt.barh(range(len(ans[i])), ans[i] ,tick_label = title , height=0.05 ,   color=['turquoise' , 'lightcoral' ],)#绘图
    plt.xticks(fontsize=20)  #横坐标
    plt.yticks(fontsize=20) #纵坐标
    for rect in b:
        w = rect.get_width()
        plt.text(w, rect.get_y() + rect.get_height() / 2, '%d' %  #放置小标题
                 int(w), ha='left', va='center')
    plt.pause(0.5)#延时,每次图片播放的时间填多少就是多少,单位为秒
plt.show()
相关文章
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
|
数据可视化 数据挖掘 Linux
震撼发布!Python数据分析师必学,Matplotlib与Seaborn数据可视化实战全攻略!
在数据科学领域,数据可视化是连接数据与洞察的桥梁,能让复杂的关系变得直观。本文通过实战案例,介绍Python数据分析师必备的Matplotlib与Seaborn两大可视化工具。首先,通过Matplotlib绘制基本折线图;接着,使用Seaborn绘制统计分布图;最后,结合两者在同一图表中展示数据分布与趋势,帮助你提升数据可视化技能,更好地讲述数据故事。
431 1
|
数据可视化 Python
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
通过这些思维导图和分析说明表,您可以更直观地理解和选择适合的数据可视化图表类型,帮助更有效地展示和分析数据。
703 8
|
移动开发 数据可视化 数据挖掘
利用Python实现数据可视化:以Matplotlib和Seaborn为例
【10月更文挑战第37天】本文旨在引导读者理解并掌握使用Python进行数据可视化的基本方法。通过深入浅出的介绍,我们将探索如何使用两个流行的库——Matplotlib和Seaborn,来创建引人入胜的图表。文章将通过具体示例展示如何从简单的图表开始,逐步过渡到更复杂的可视化技术,帮助初学者构建起强大的数据呈现能力。
|
数据可视化 JavaScript 前端开发
Python中交互式Matplotlib图表
【10月更文挑战第20天】Matplotlib 是 Python 中最常用的绘图库之一,但默认生成的图表是静态的。通过结合 mpld3 库,可以轻松创建交互式图表,提升数据可视化效果。本文介绍了如何使用 mpld3 在 Python 中创建交互式散点图、折线图和直方图,并提供了详细的代码示例和安装方法。通过添加插件,可以实现缩放、平移和鼠标悬停显示数据标签等交互功能。希望本文能帮助读者掌握这一强大工具。
|
数据采集 数据可视化 数据处理
如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`)
本文介绍了如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`),加载历史数据,计算均线和其他技术指标,实现交易逻辑,记录和可视化交易结果。示例代码展示了如何根据均线交叉和价格条件进行开仓、止损和止盈操作。实际应用时需注意数据质量、交易成本和风险管理。
991 5
|
存储 数据可视化 数据挖掘
揭秘!Matplotlib与Seaborn联手,如何让Python数据分析结果一目了然,惊艳全场?
在数据驱动时代,高效直观地展示分析结果至关重要。Python中的Matplotlib与Seaborn是两大可视化工具,结合使用可生成美观且具洞察力的图表。本文通过分析某电商平台的商品销量数据集,展示了如何利用这两个库揭示商品类别与月份间的销售关系及价格对销量的影响。首先使用Matplotlib绘制月份销量分布直方图,再借助Seaborn的箱线图进一步探索不同类别和价格区间下的销量稳定性。
300 10
|
机器学习/深度学习 搜索推荐 数据可视化
Python量化炒股常用的Matplotlib包
Python量化炒股常用的Matplotlib包
423 7
|
数据可视化 数据挖掘 API
Python中的数据可视化利器:Matplotlib与Seaborn对比解析
在Python数据科学领域,数据可视化是一个重要环节。它不仅帮助我们理解数据,更能够让我们洞察数据背后的故事。本文将深入探讨两种广泛使用的数据可视化库——Matplotlib与Seaborn,通过对比它们的特点、优劣势以及适用场景,为读者提供一个清晰的选择指南。无论是初学者还是有经验的开发者,都能从中找到有价值的信息,提升自己的数据可视化技能。
997 3
|
数据可视化 数据挖掘 开发者
数据可视化新纪元!Python + Matplotlib + Seaborn,让你的数据故事生动起来!
在这个数据可视化的新纪元,让我们充分发挥 Python 的优势,用精彩的图表讲述数据背后的故事,为决策提供有力的支持,为交流带来清晰的视角。
202 4

推荐镜像

更多