-
2020-11-20 20:12:56
Python+matplotlib绘制极坐标柱状图(南丁格尔玫瑰图)
Python使用折线图、柱状图、热力图比较不同班级相同学号学生的成绩
问题描述:有些学校的学号最后两位是根据入学成绩顺序排的,那么入学之后同学们的学习状态是否会有变化呢,入学成绩较好的同学是否能够一直保持优势呢,会不会有同学是高考...
Python+matplotlib绘制三维图形5个精选案例
接下来就可以使用ax的plot()方法绘制三维曲线、plot_surface()方法绘制三维曲面、scatter()方法绘制三维散点图或bar3d()方法绘制三...
HenCoder Android 自定义 View 1-5: 绘制顺序
之前的内容在这里:
HenCoder Android 开发进阶 自定义 View 1-1 绘制基础
HenCoder Android 开发进阶 自定义 View...
Spark 2.0 Structured Streaming 分析
Spark 2.0 将流式计算也统一到DataFrame里去了,提出了Structured Streaming的概念,将数据源映射为一张无线长度的表,同时将流式...
Coding集成Jenkins流水账
运行下列命令生成SSH key pair,生成两个文件deploykey和deploykey.pub:
流量运营下的移动互联网“风口”
说到流量,估计能使我们想起很多场景,手机上网需要流量,下个app需要流量,登录个微信需要流量,玩个游戏需要流量,甚至上网充个话费也需要流量,甚至打个电话都喜欢用...
sqlserver 连接远程sqlserver数据库
@useself = 'false', /*指定 rmtuser 和 rmtpassword 参数用来连接到特定 locallogin 的 rmtsrvname...
R中paste cat和sink的用法
Android绘制优化(二)布局优化
前言
我们知道一个界面的测量和绘制是通过递归来完成的,减少布局的层数就会减少测量和绘制的时间,从而性能就会得到提升。当然这只是布局优化的一方面,那么如何来进行布...
更多相关内容 -
Python动态柱状图案例——人口变化动态图
2022-05-31 16:29:13Python动态柱状图案例,获取了1959年至2018年各国人口统计数据,使用matplotlib绘制动态柱状图。 -
python画柱状图–不同颜色并显示数值的方法
2020-12-25 13:04:18用python画柱状图容易,但是如何对不同柱子使用不同颜色呢?同时在柱子顶端显示精确数值? 主要用的方法为: atplotlib.pyplot.bar(left, height, width=0.8, bottom=None, hold=None, data=None, **kwargs) 参数... -
Python可视化工具如何实现动态图表
2020-12-16 18:18:35本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原...接下来,将手把手教你如何绘制这个动态图,您可在公众号后台回复「kepler」获取数据集进行测试。 数据准备 第一步,打开并预览一下数据 -
python画柱状图--不同颜色并显示数值的方法
2020-09-19 20:31:44今天小编就为大家分享一篇python画柱状图--不同颜色并显示数值的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 -
如何使用matplotlib绘制动态柱状图-python
2022-04-30 18:27:05这期博客,我们来学习一下,如何使用python的matplotlib绘制动态的柱状图,机缘巧合之后,导师非让我替他绘制一个动态的柱状图,然后在导师一天的在线督促下,我速成了一下这个动态柱状图,在这里把代码和方法开源...这期博客,我们来学习一下,如何使用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()#清除当前的图片,重新画新的
除了这两个是关键的,其他的代码就都是画图的常规代码了,看不懂的直接百度就行了。
横向动态柱状图:
纵向柱状图:
主要是CSDN不能上传视频到博客,做成的GIF动图效果又差的一批,那我这里把动态的视频放到我的B站,大家看效果可以点击链接直接观看。一般都是用python做好动态图,然后录屏再做成GIF动图,不过当日我导师要的是视频,然后让我剪辑加上音乐的。
B站视频演示链接
如何使用matplotlib绘制动态柱状图-python_哔哩哔哩_bilibili
首先是我采集的数据:
后来发现数据这样排列,不例如python的提取,我就稍微修改了一下,去掉了title,改成了如下的样子,方便我们使用pandas库进行提取。
竖着的柱状图绘图代码:
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()
整个项目的下载链接:链接:https://pan.baidu.com/s/1KVpBPCOA__8hHYhSbNY7yQ
提取码:alid -
Python 堆叠柱状图绘制方法
2020-09-18 23:28:27主要介绍了Python 堆叠柱状图绘制方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 -
python使用matplotlib绘制柱状图教程
2021-01-20 05:03:49小编之前也和大家分享过python使用matplotlib实现的折线图和制饼图效果,感兴趣的朋友们也可以点击查看,下面来看看python使用matplotlib绘制柱状图的方法吧,具体如下: 1. 基本的柱状图 import matplotlib.pyplot... -
python使用matplotlib画柱状图、散点图
2021-01-01 13:24:42本文实例为大家分享了python使用matplotlib画柱状图、散点图的具体代码,供大家参考,具体内容如下 柱状图(plt.bar) 代码与注释 import numpy as np from matplotlib import pyplot as plt plt.figure(figsize=(9... -
python3+PyQt5实现柱状图
2020-12-25 21:55:09本文通过Python3+pyqt5实现了python Qt GUI 快速编程的16章的excise例子。 #!/usr/bin/env python3 import random import sys from PyQt5.QtCore import (QAbstractListModel, QAbstractTableModel, QModelIndex, ... -
Python_matplotlib库绘制02(柱状图,饼状图)
2020-12-21 07:29:42文章目录柱状图一个简单柱状图改变其颜色设置标签堆叠柱状图横向条形图并列柱状图饼状图简单饼状图一块饼图到中心距离设置颜色显示百分比 柱状图 一个简单柱状图 import matplotlib.pyplot as plt num_list=[1,5,6.5... -
十分钟教你实现,高大上动态柱状图的可视化(python + Flourish)
2020-11-20 20:12:36具体的操作请参考下面的动图:二、 Python与数据处理基于动态的柱状图的数据要求:不同的日期是按照新增的列显示出来,而不是按照行的形式进行展现的。具体如下图:但是,通常的情况下,获取得到的数据是按照行进行...一、 动态柱状图的意义
动画可以有趣地展示某种现象。相比于静态图表,人们更容易被动画和交互式的图表所吸引。在描绘时间序列数据时,动画更有意义。
总之一句话,领导基本都好这口的咯!
具体的操作请参考下面的动图:
二、 Python与数据处理
基于动态的柱状图的数据要求:不同的日期是按照新增的列显示出来,而不是按照行的形式进行展现的。具体如下图:
但是,通常的情况下,获取得到的数据是按照行进行获取的。
为了将行转换为列,需要用Python进行一下的操作:
读取原始数据,确定目标表中的行——具体读取省份信息之后,然后在去重即可
读取原始数据,确定目标表中的列——具体读取日期信息之后,然后在去重,接着排序即可
根据以上确定的行,以及列——采用循环的函数直接将相应的数值给补充上即可!!!
备注: 以上 Python 代码,以及上传到 GIthub
https://github.com/DataClubs/Python-Flourish
三、 Flourish与数据可视化
登录https://flourish.studio/注册免费的账号
导入以上Python数据处理得到的目标Excel数据
按照下图进行相应的数据设置
四、 动态柱状图的操作视频(先收藏,再观看!)
-
Python:Matplotlib画曲线和柱状图(Code)
2021-02-24 07:57:40下面在一个2*2的figure里面来比较这四个子图(还有plot())。如上面的代码所示,对一个低通滤波器函数绘图。得到四个不同坐标尺度的图像。如下图所示极坐标系中的点由一个夹角和一段相对于中心位置的距离来表示。... -
Python实现绘制双柱状图并显示数值功能示例
2020-09-20 08:17:36主要介绍了Python实现绘制双柱状图并显示数值功能,涉及Python数值运算及基于matplotlib的图形绘制相关操作技巧,需要的朋友可以参考下 -
python 画条形图(柱状图)实例
2020-09-17 12:25:23主要介绍了python 画条形图(柱状图)实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 -
动态排名柱状图的两种做法
2020-11-23 20:50:03受B站拜年祭发射最多的弹幕...如果需要快速出图,后者更简单(也更美观)。方法一:PythonMATPLOTLIB的动画类MATPLOTLIB包含了一个动画类——Animation,用这个类就可以实现图标的动画效果。先看下官方文档给出的例...受B站拜年祭发射最多的弹幕是什么?视频启发,对日常维护工作中的故障硬件也做了一次盘点。这里介绍两种方法,第一种是Python + Matplotlib;第二种是利用GitHub上现成的“轮子”。如果需要快速出图,后者更简单(也更美观)。
方法一:Python
MATPLOTLIB的动画类
MATPLOTLIB包含了一个动画类——Animation,用这个类就可以实现图标的动画效果。先看下官方文档给出的例子:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
fig, ax = plt.subplots()xdata, ydata = [], []ln, = plt.plot([], [], 'ro')
def init():
ax.set_xlim(0, 2*np.pi)
ax.set_ylim(-1, 1)
return ln,
def update(frame):
xdata.append(frame)
ydata.append(np.sin(frame))
ln.set_data(xdata, ydata)
return ln,
ani = FuncAnimation(fig, update, frames=np.linspace(0, 2*np.pi, 128),
init_func=init, blit=True)plt.show()
上例中,init初始化图表,update函数则负责更新图表中的数据。最主要的是FuncAnimation,通过不断调用update,并将frames参数中的值依次传递给update,更新图表。这个例子的运行结果如下:
示例gif
数据整理
先将故障硬件的名称、故障数量和发生日期整理好。好在这些数据一直以来都有不定期梳理。梳理后的格式如下:
整理后的数据
保存成csv后由pandas读取到DataFrame中,同时解析日期:
with open('plugin_faults.csv', 'r') as f:
data = pd.read_csv(f, parse_dates=['date'])
因为柱状图中每根柱的长度是个累计值,而表中的是当天故障的数量,因此要按故障硬件名称累积求和:
data = data.sort_values('date')
group = data.groupby('name')
data['value_cumsum'] = group.cumsum()
data.sort_values(['date','value_cumsum','name'], inplace=True)
data.drop_duplicates(['date','name'], keep='last', inplace=True)
填充所有日期,所有硬件类型
plugins = ['PCU', '电源板', 'AS7-D', 'ESB24-D', 'CPU', 'HWAT-B', 'SW256B', 'SWPRO-C',
'ETP', 'ET16', '时钟板', 'DRAM', 'TR3T', '硬盘', 'HDSAM-A', 'DCAR1-A', '光模块', '熔丝', '网管交换机'] # 所有硬件名称
start = datetime(2017,1,1) # 开始日期
end = datetime(2019,12,31) # 结束日期
dates = [start + timedelta(days=i) for i in range((end - start).days + 1)]
index = pd.MultiIndex.from_product([dates, plugins], names = ["date", "name"]) # 3年内所有日期与硬件名称的笛卡尔积作为多重索引
df = pd.DataFrame(index=index)
df['value'] = data.set_index(['date', 'name'])['value_cumsum'] # 向DataFrame填入data中的数据
df = df.unstack(level=1).fillna(method='ffill') # 将硬件名称索引unstack,前向填充累计故障数(比如累计到昨天一共坏n件,而今天没有该硬件故障,则累计数量还是n件)
df = df.stack(dropna=False).reset_index().fillna(0) # 转换成无索引的DataFrame,并填充缺失值为0(从开始时间直至第一个同类型硬件发生故障的值均为缺失值)
至此数据整理部分结束,得到了2017至2019年共计3年内每天每种硬件故障的累计数的DataFrame。
作图
通过水平柱状图将故障硬件的数量进行排名可视化,每个柱一个颜色,由多到少自上往下排列。
水平柱状图用barh生成,动画需更新每日的排序,但同一种硬件的颜色不能改变,因此初始化了plugin_color字典。
update函数中的df_i为当前帧所使用的数据,以日期作为筛选标准。
fig, ax = plt.subplots()
# 分配颜色的字典
colormap = [i / len(plugins) * 0.7 + 0.15 for i, _ in enumerate(plugins)]
colormap = plt.get_cmap('Paired')(colormap)
plugin_color = {plugins[i]: colormap[i] for i in range(len(plugins))}
def update(i):
date = datetime(2017, 1, 1) + timedelta(days=i)
# 筛选当日的数据,按数量排序
df_i = df[df['date'] == date]
df_i = df_i.sort_values('value', ascending=True)
names = df_i['name'] # 硬件名称作为Y轴标签
colors = [plugin_color[name] for name in names]
value = df_i['value'] # X轴的值
ax.clear() # 清理ax,否则排序不会重做
x = max(value) * 0.85 # 图中日期标签的水平相对位置
if i == 0:
ax.set_xlim(0, 1.05)
x = 0.85
# 水平柱状图
rects = ax.barh(y=names,
width=value,
align='center',
height=0.5,
color=colors)
# 每个柱的数字标签
for i, v in enumerate(value):
ax.text(v + 0.1, i, int(v), color=colors[i], ha='left', va='center')
# 日期标签
ax.text(x, 0.5, date.strftime('%Y-%m-%d'),
fontweight='bold', fontsize='25', color='red')
return rects
生成动画对象,回调函数为update,frames传入3年的日期数,interval定义每一帧的时延(每秒8帧)。
blit我试了下没感觉有啥区别,按照官方文档的说法,是一种比较老的绘图技术,这里设成False。
repeat控制是否循环播放。
ani = animation.FuncAnimation(fig=fig,
func=update,
frames=int(len(df) / len(plugins)),
interval=1000/8, # 每帧之间的时延,单位:ms
blit=False,
repeat=False)
保存为视频或GIF:
ani.save('test.gif', dpi=10, writer='pillow')
ani.save('test.mp4')
如果要在jupyter notebook中直接显示(中文显示问题参见“参考3”):
%matplotlib inline
from IPython.display import HTML
HTML(ani.to_html5_video())
生成的动态排名柱状图GIF(完整的GIF太大,只截部分):
生成gif
方法二:现成的“轮子”
从ID来看,应该就是B站视频的原作者在GitHub上的一个库(见“参考2”),使用的是d3.js的前端作图。只要将数据整理成规定的格式,直接从网页导入即可。也可以修改一些简单的配置,非常好用,在此推荐一下。
最后一帧截图:
最后一帧
参考
-
Python读取Excel表格,并同时画折线图和柱状图的方法
2020-09-20 01:20:53今天小编就为大家分享一篇Python读取Excel表格,并同时画折线图和柱状图的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 -
Python绘制堆叠柱状图的实例
2020-12-31 21:27:02有个朋友要求帮忙绘制堆叠柱状图,查阅了一些文档之后也算是完成了,只是一个小demo,下面我就记录一下。 1.什么是堆叠柱状图 与并排显示分类的分组柱状图不同,堆叠柱状图将每个柱子进行分割以显示相同类型下各个... -
python使用Plotly绘图工具绘制柱状图
2020-12-26 05:26:10本文实例为大家分享了python使用Plotly绘图工具绘制柱状图的具体代码,供大家参考,具体内容如下 使用Plotly绘制基本的柱状图,需要用到的函数是graph_objs 中 Bar函数 通过参数,可以设置柱状图的样式。 通过barmod... -
Python 绘制 柱状图
2020-11-20 19:21:3942996,24872,13849,8609,5331,1971,554,169,26)#包含每个柱子下标的序列 index =np.arange(N)#柱子的宽度 width = 0.45 #绘制柱状图, 每根柱子的颜色为紫罗兰色 p2 = plt.bar(index, values, width, label="num", ... -
基于python的柱状图绘制与实现
2022-05-24 19:27:48基于python的柱状图绘制与实现 -
Python matplotlib绘制柱状图
2020-11-08 22:48:21Python matplotlib绘制柱状图 -
Python画图实现同一结点多个柱状图的示例
2020-09-19 03:16:48今天小编就为大家分享一篇Python画图实现同一结点多个柱状图的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 -
Python+pyplot绘制带文本标注的柱状图方法
2020-09-19 03:20:01今天小编就为大家分享一篇Python+pyplot绘制带文本标注的柱状图方法,具有很好的价值,希望对大家有所帮助。一起跟随小编过来看看吧 -
迅速上手 Python 画图 —— 柱状图
2021-01-20 03:07:25本文目标在于利用 PythonPythonPython 快速画出符合自己要求的柱状图。 最近在处理某一组成绩数据的时候,涉及了柱状图的画法,因此此处进行一下记录。 加载库 import matplotlib.pyplot as plt import matplotlib....