超燃动态可视化条形图源码及效果图_超燃动态可视化条形图源码及效果图

不多废话,直接上代码:

import pandas as pd

import numpy as np

import matplotlib as mpl

import matplotlib.pyplot as plt

import matplotlib.ticker as ticker

import matplotlib.colors as mc

import colorsys

from random import randint

import matplotlib.animation as animation

from IPython.core.display import HTML

import re

import pdb

df = pd.read_csv('shares/data/World 1960-2016GDP1.csv',encoding = "gbk",usecols=['country','year','value'])

df= df[df['year']>1980].copy()

#为了更平滑的效果,对数据进行插值处理

#先对数据进行转置

#函数解释见https://blog.csdn.net/cxd3341/article/details/105016903

df = df.pivot(index='country',columns='year',values='value')

df = df.reset_index()

下图是数据插值代码:

for p in range(3):

i=0

while i

为每个国家都随机配置条形图颜色:

def transform_color(color, amount = 0.5):

try:

c = mc.cnames[color]

except:

c = color

c = colorsys.rgb_to_hls(*mc.to_rgb(c))

return colorsys.hls_to_rgb(c[0], 1 - amount * (1 - c[1]), c[2])

all_names = df['country'].unique().tolist()

random_hex_colors = []

for i in range(len(all_names)):

random_hex_colors.append('#' + '%06X' % randint(0, 0xFFFFFF))

rgb_colors = [transform_color(i, 1) for i in random_hex_colors]

rgb_colors_opacity = [rgb_colors[x] + (1.0,) for x in range(len(rgb_colors))]

rgb_colors_dark = [transform_color(i, 1.0) for i in random_hex_colors]

number_of_element = 8

plt.rcParams['font.sans-serif']=['SimHei']

plt.rcParams['animation.ffmpeg_path'] ='C:/Program Files/ffmpeg-win64-static/bin/ffmpeg.exe'

fig, ax = plt.subplots(figsize=(15,9))

def draw_barchart(year):

dff = df[df['year'].eq(year)].sort_values(by='value',ascending=True).tail(number_of_element)

ax.clear()

normal_colors = dict(zip(df['country'].unique(),rgb_colors_opacity))

dark_colors = dict(zip(df['country'].unique(),rgb_colors_dark))

ax.barh(dff['country'],dff['value'],color=[normal_colors[x] for x in dff['country']],height=0.4,

edgecolor = ([dark_colors[x] for x in dff['country']]),linewidth='2')

dx = dff['value'].max()/200

for i, (value, country) in enumerate(zip(dff['value'],dff['country'])):

ax.text(value + dx, i, country, size=14,weight=600, ha='right',va='center') #Tokyo: name

ax.text(value + dx, i, f'{value:,.0f}',size=14, ha='left',va='center') #38194.2: value

#ax.text(value + dx, i + (num_of_elements / 50), ' ' + name,

#size = 36, weight = 'bold', ha = 'left', va = 'center', fontdict = {'fontname': 'Trebuchet MS'})

#ax.text(value + dx, i - (num_of_elements / 50), f' {value:,.0f}', size = 36, ha = 'left', va = 'center')

#优化风格

# 在画布的右中间部分添加年份

year_unit_displayed = re.sub(r'\^(.*)', r'', str(year))

ax.text(1.0,0.4, year_unit_displayed, transform=ax.transAxes, size=46,ha='right')

ax.text(0,1.06,'GDP(亿美元)',transform=ax.transAxes,size=12,color='#777777')

ax.xaxis.set_major_formatter(ticker.StrMethodFormatter('{x:,.0f}'))

ax.xaxis.set_ticks_position('top')

ax.tick_params(axis='x',colors='#777777',labelsize=12)

ax.set_yticks([])

ax.margins(0,0.01)

ax.grid(which='major',axis='x',linestyle='-')

ax.set_axisbelow(True)

ax.text(0,1.12,'The GDP of each Country from 1981 to 2016',

transform=ax.transAxes,size=24,weight=600,ha='left')

ax.text(1.3,0,'by@ Poseidon;',transform=ax.transAxes,size = 20,

ha='right',color='#777777',bbox=dict(facecolor='white',alpha=0.4,

edgecolor='white'))

plt.locator_params(axis = 'x', nbins = 4)

plt.box(False)

plt.subplots_adjust(left = 0.075, right = 0.75, top = 0.825, bottom = 0.05, wspace = 0.2, hspace = 0.2)

animator = animation.FuncAnimation(fig,draw_barchart,frames=frames_list)

HTML(animator.to_jshtml())

FFwriter=animation.FFMpegWriter(fps=10, extra_args=['-vcodec', 'libx264'])

animator.save("shares/data/WorldGDP.mp4", writer = FFwriter)

超燃动态可视化条形图


http://www.niftyadmin.cn/n/490345.html

相关文章

python中 有什么用_python中的生成器是什么?生成器有什么用处?

在以下的文章之中我们来了解一下什么是python中生成器。了解一下python生成器是什么,以及生成器在python编程之中能起到什么样的作用。 python生成器是什么? 通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制&#xf…

ios下js复制到粘贴板_Clipboard.js : 移动端复制到粘贴板兼容问题

最近在项目中遇到这样一个需求:点击按钮,将指定的URL/字符串 复制到剪贴板,然后用户可以粘贴到其他地方。方案一:zeroClipboard.jsgithub地址:https://github.com/zeroclipboard/zeroclipboard复制原理:zer…

vue写导航栏高亮显示的过渡动画效果

vue写导航栏高亮显示的过渡动画效果 类似下面这种样式 直接上代码 <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" …

原生Js导出Excel文件

我们在开发过程中会遇到下载excel文件的需求&#xff0c;特别是后台管理的项目。 首先我们先安装一下组件 npm install js-export-exceloryarn add js-export-excel然后在需要使用的地方引入 const ExportJsonExcel require("js-export-excel");orimport ExportJs…

京瓷6525_天锐技术京瓷8520/6525/4125纸盒1故障的成因及排除

京瓷8520/6525/4125系列机器提示 &#xff1a;纸盒1故障的成因及排除方法。 一般是在使用过程中&#xff0c;因卡纸没有取彻底等原因造成机器提示纸盒一故障。如图&#xff1a;第一步&#xff1a;首先拉出一纸盒查看里面是否有纸张&#xff0c;将里面的纸张全部取净&#…

如何从python调用命令行_Google 开源的 Python 命令行库:深入 fire(一)

作者&#xff1a;HelloGitHub-Prodesire涉及的示例代码&#xff0c;已同步更新到 HelloGitHub-Team 仓库点击本文最下方的“阅读原文”即可获取一、前言在第一篇“初探 fire”的文章中&#xff0c;我们初步掌握了使用 fire 的简单步骤&#xff0c;了解了它 Pythonic 的用法。今…

音频功率放大器仿真_大功率射频功率放大器常规仿真设计流程

在现代无线通信系统中&#xff0c;信息传输正朝着多载波、大容量、高速度方向迅猛发展&#xff0c;通信系统对射频部件的各项性能提出了更高的要求。作为射频前端模块的重要部件,功率放大器对通信连接的性能起着关键性作用。根据日常工作总结&#xff0c;ADS仿真设计一款功率放…

讯为开发板pcie接口驱动_评测丨立体认识飞凌LS1028A系列开发板,内外兼修

在 OK1012A- C 、 OK1043A-C 、 OK1046A-C 之后&#xff0c; 飞凌嵌入式推出了 OK1028A-C 新一代 Layerscape 系列 开发板。在 OK1028A-C 到来之前&#xff0c; OK1046A-C 的性能毋庸置疑处于大师兄的位置&#xff0c; OK1043A-C 紧随其后&#xff0c; OK1012A-C 妥妥的只能当个…