# Python实现酷炫的动态交互式数据可视化，附代码

### 这是本文的目录

(关注我，免费获取python视频教程！)

## ; 数据可视化

github 地址[1]

Matplotlib

Matplotlib 可能是最广为人知的Python数据可视化库。举个例子，我将向你介绍如何创建一张PCA方差GIF图。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3D
import seaborn as sns
import os
from sklearn.decomposition import PCA
import imageio

my_dpi=96
plt.figure(figsize=(480/my_dpi, 480/my_dpi), dpi=my_dpi)

# Keep the ‘specie’ column appart + make it numeric for coloring

df[‘species’]=pd.Categorical(df[‘species’])
my_color=df[‘species’].cat.codes
df = df.drop(‘species’, 1)

# Run The PCA

pca = PCA(n_components=3)
pca.fit(df)

# Store results of PCA in a data frame

result=pd.DataFrame(pca.transform(df), columns=[‘PCA%i’ % i for i in range(3)], index=df.index)

# 20 plots, for 20 different angles

for angle in range(70,210,2):

# Plot initialisation

fig = plt.figure()
ax.scatter(result[‘PCA0’], result[‘PCA1’], result[‘PCA2’], c=my_color, cmap=”Set2_r”, s=60)

# make simple, bare axis lines through space:

xAxisLine = ((min(result[‘PCA0’]), max(result[‘PCA0’])), (0, 0), (0,0))
ax.plot(xAxisLine[0], xAxisLine[1], xAxisLine[2], ‘r’)
yAxisLine = ((0, 0), (min(result[‘PCA1’]), max(result[‘PCA1’])), (0,0))
ax.plot(yAxisLine[0], yAxisLine[1], yAxisLine[2], ‘r’)
zAxisLine = ((0, 0), (0,0), (min(result[‘PCA2’]), max(result[‘PCA2’])))
ax.plot(zAxisLine[0], zAxisLine[1], zAxisLine[2], ‘r’)

ax.view_init(30,angle)

# label the axes

ax.set_xlabel(“PC1”)
ax.set_ylabel(“PC2”)
ax.set_zlabel(“PC3”)
ax.set_title(“PCA Iris Dataset”)
filename=’PCA/PCA_angle’+str(angle)+’.png’
plt.savefig(filename, dpi=96)

def make_gif(input_folder, save_filepath):
episode_frames = []
time_per_step = 0.25
for root, _, files in os.walk(input_folder):
file_paths = [os.path.join(root, file) for file in files]

# sorted by modified time

file_paths = sorted(file_paths, key=lambda x: os.path.getmtime(x))
for file_path in file_paths if file_path.endswith(‘.png’)]
episode_frames = np.array(episode_frames)
imageio.mimsave(save_filepath, episode_frames, duration=time_per_step)

make_gif(‘./PCA/’, ‘./PCA/PCA.gif’)

## 图1：PCA方差图

Celluloid

from celluloid import Camera
import numpy as np
import matplotlib.pyplot as plt
fig, axes = plt.subplots(2)
camera = Camera(fig)
t = np.linspace(0, 5 * np.pi, 128, endpoint=False)
t2 = np.linspace(0, 1 * np.pi, 128, endpoint=False)
for i in t2:
axes[0].plot(t, np.cos(t/2 + i), color=’b’)
axes[1].plot(t2, np.sin(t2 – i), color=’b’)
camera.snap()

animation = camera.animate()
animation.save(‘celluloid_example.gif’, writer = ‘imagemagick’)

## ; 图 2：Celluloid例子

Plotly

Plotly是一个基于plotly.js的开源Python库。 Plotly有两种不同的模式：在线和离线。通过该库，我们可以使用在线模式制作无限制的离线模式图表和最多25个在线图表。在安装Plotly时，需要注册到他们的网站并获得API密钥才能开始（而不能像文中其它库一样仅仅使用pip install）。

import plotly.graph_objs as go
from plotly.offline import init_notebook_mode, iplot
init_notebook_mode(connected=True)
import plotly.plotly as py
import plotly
import pandas as pd
import datetime
df[‘date’] = df[‘date’].astype(‘str’)
df[‘high’] = df[‘high’].astype(‘double’)
df[‘low’] = df[‘low’].astype(‘double’)
date2 = []
for i in df[‘date’]:
new_date = datetime.datetime.strptime(i, “%d/%m/%Y”).strftime(“%Y-%m-%d”)
date2.append(new_date)

df[‘date’] = df[‘date’].str.replace(‘/’, ‘-‘)
df[‘date’] = date2
df.fillna(0)

## 图三：特斯拉数据集

trace_high = go.Scatter(
x=df.date,
y=df[‘high’],
name = “TSLA High”,
line = dict(color = ‘#17BECF’),
opacity = 0.8)
trace_low = go.Scatter(
x=df.date,
y=df[‘low’],
name = “TSLA Low”,
line = dict(color = ‘#7F7F7F’),
opacity = 0.8)
data = [trace_high,trace_low]
layout = dict(
,
xaxis=dict(
rangeselector=dict(
buttons=list([
dict(count=1,
label=’1m’,
step=’month’,
stepmode=’backward’),
dict(count=6,
label=’6m’,
step=’month’,
stepmode=’backward’),
dict(step=’all’)
])
),
rangeslider=dict(
visible = True
),
type=’date’
)
)
fig = dict(data=data, layout=layout)
iplot(fig, filename = “Time Series with Rangeslider”)
plotly.offline.plot(fig, filename=’Plotly_Stock.html’)

## ; 图4：Plotly例子

Bokeh

Bokeh库同时支持Python和JavaScript。它的大多数图形，交互和小部件都可以用Python实现，但是在一些情况中也要用到JavaScript。

import pandas as pd
import numpy as np
from bokeh.plotting import figure
from bokeh.io import output_file, show, output_notebook
from bokeh.models import CustomJS
from bokeh.models.widgets import CheckboxGroup
from bokeh.layouts import row
from bokeh.palettes import Viridis4
from bokeh.models.annotations import Title, Legend
df[‘date’] = pd.to_datetime(df[‘date’], format=’%d/%m/%Y’)
p = figure(x_axis_type=’datetime’, plot_width=800)
aline = p.line(df[‘date’], df[‘high’], line_width=2, color=Viridis4[0])
bline = p.line(df[‘date’], df[‘low’], line_width=2, color=Viridis4[1])
cline = p.line(df[‘date’], df[‘open’], line_width=2, color=Viridis4[2])
dline = p.line(df[‘date’], df[‘close’], line_width=2, color=Viridis4[3])
p.yaxis.axis_label = ‘Price’
p.xaxis.axis_label = ‘Time Span’
legend = Legend(items=[
(“High Price”, [aline]),
(“Low Price”, [bline]),
(“Open Price”, [cline]),
(“Close Price”, [dline])
], location=(0, 450))
t = Title()
t.text = ‘Tesla Stock Market Analysis’
p.title = t
checkboxes = CheckboxGroup(labels=list([‘High Price’, ‘Low Price’, ‘Open Price’,
‘Close Price’]), active=[0, 1, 2, 3])
callback = CustomJS(code=”””aline.visible = false; // aline and etc… are
bline.visible = false; // passed in from args
cline.visible = false;
dline.visible = false;
// cb_obj is injected in thanks to the callback
if (cb_obj.active.includes(0)){aline.visible = true;}
// 0 index box is aline
if (cb_obj.active.includes(1)){bline.visible = true;}
// 1 index box is bline
if (cb_obj.active.includes(2)){cline.visible = true;}
// 2 index box is cline etc…

if (cb_obj.active.includes(3)){dline.visible = true;}”””,
args={‘aline’: aline, ‘bline’: bline, ‘cline’: cline, ‘dline’: dline})
checkboxes.js_on_click(callback)
output_file(‘Tesla_Stock_Widget.html’)
show(row(p, checkboxes))

## 图5：Bokeh 演示

Plotly和Bokeh都可以被另外用作Python的仪表板框架，创建出非常惊人的结果。

Seaborn

Seaborn 是一个建立在Matplotlib之上的python库，用于制作统计图表。根据Seaborn官网的介绍：

import seaborn as sns
sns.set(style=”ticks”)
sns.pairplot(df, hue=”species”)

## ; 图6 Seaborn 矩阵图

nbinteract

nbinteract可以让我们在Jupiter Notebook上创建交互式小部件。如果需要，也可以用HTML导出这些小部件。可以在这里[8]找到nbinteract在线实现的实例。

from ipywidgets import interact
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
import nbinteract as nbi
def cars(name, number):
return ‘{} has {} cars!’.format(name, number)

interact(cars, name=’Nemo’, number={‘Zero’: 0, ‘Two’: 2,
‘Three’: 3, ‘Ten’: 10});

## 👉Python学习路线汇总👈

Python所有方向的技术点做的整理，形成各个领域的知识点汇总，它的用处就在于，你可以按照上面的知识点去找对应的学习资源，保证自己学得较为全面。

## 👉面试刷题👈

; 资料领取

Original: https://blog.csdn.net/weixin_49892805/article/details/127396251
Author: 老程序员的最大爱好
Title: Python实现酷炫的动态交互式数据可视化，附代码

(0)

### 大家都在看

• #### 2流高手速成记（之五）：Springboot整合Shiro实现安全管理

废话不多说，咱们直接接上回 上一篇我们讲了如何使用Springboot框架整合Nosql，并于文章最后部分引入了服务端Session的概念 而早在上上一篇中，我们则已经讲到了如何使…

Python 2023年10月17日
0103
• #### 又是樱花盛开的季节，使用小乌龟来画一颗樱花树吧

【阅读全文】 后来，唐李钰曾说过，樱花在春天会昏昏欲睡，在秋千架下又会回来。滴落的暗斜的月亮晚了，花儿开在枝头。当樱花落下时，春天就结束了，当它回到秋千下的时候。天空中的斜月已经晚…

Python 2023年5月24日
0154
• #### Windows下Anaconda安装了Pytorch，在Pycharm无法import torch或者numpy

首先要安装好了Pytorch，安装过程如博主所示：使用anaconda安装pytorch_UstarZzz的博客-CSDN博客_anaconda安装pytorch 文中博主创建了一…

Python 2023年8月26日
0151
• #### 即兴小探华为开源行业领先大数据虚拟化引擎openLooKeng

@ 概述 定义 背景 特点 架构 关键技术 应用场景 安装 单台部署 集群部署 命令行接口 连接器 MySQL连接器 ClickHouse连接器 概述 定义 openLooKeng…

Python 2023年10月17日
086
• #### pandas数据分析之分组聚合

pandas数据分析之分组聚合 * – 一、创建分组对象进行分组 – + 1、分组键为列名 + 2、分组键为字典或Series + 3、分组键为函数 &#8…

Python 2023年8月16日
0138
• #### Matplotlib，设置坐标刻度大小，字体/设置图例大小及字体/设置纵横坐标名称及字体及大小

import matplotlib.pyplot as plt x1 =[0,5000,10000, 15000, 20000, 25000, 30000, 35000, 4000…

Python 2023年9月1日
0208
• #### dataframe筛选列名_【DataFrame】查看与筛选数据

1 查看列的数据类型 使用 dtypes 方法可以查看各列的数据类型，比如说之前的 df3。 dic1 = {‘name’: [‘小明&#821…

Python 2023年8月6日
0104

目录 前言 一、引入flask 二、使用步骤 1.生成本地app 2.返回html 3.使用flask和echarts 4.传输数据和接受数据 5.调整参数 三、看成果 前言 利用…

Python 2023年8月9日
0135
• #### javaee之spring2

基于注解的IOC配置 一、先来说一下放在对象上面的注解 Component:* 作用：用于把当前类对象存入spring容器中* 属性：* value：用于指定bean的id。当我们…

Python 2023年10月8日
091
• #### Selenium+python自动化-登录教程

Original: https://www.cnblogs.com/123456feng/p/16195474.htmlAuthor: 蚂蚁ailingTitle: Seleniu…

Python 2023年11月3日
083
• #### Python命令代码

（1）打开csv文件 import pandas as pd df=pd.read_csv(r’data/data.csv’) （2）dataframe i…

Python 2023年8月21日
0104
• #### 微信小程序的点击事件、页面跳转、数据绑定、数据修改、获取用户信息及定位、for指令、获取用户上传图片

data&#x662F;&#x70B9;&#x51FB;&#x65F6;&#x4F20;&#x5165;&#x7684;&a…

Python 2023年10月30日
095
• #### 嵌入式软件工程师技能树——应用编程/网络编程/驱动开发/操作系统/计算机网络

啊哦~你想找的内容离你而去了哦 内容不存在，可能为如下原因导致： ① 内容还在审核中 ② 内容以前存在，但是由于不符合新 的规定而被删除 ③ 内容地址错误 ④ 作者删除了内容。 可…

Python 2023年9月26日
0118
• #### Web Spider NEX XX国际货币经纪 – PDF下载 & 提取关键词（二）

Web Spider NEX XX国际货币经纪 – PDF下载 & 解析 &#x9996;&#x5148;&#x58F0;&#x…

Python 2023年9月16日
092
• #### 缺陷修改实践——replace函数的运用|思考？

目录 * – 介绍 – 问题出现 – 问题分析 – 解决方法 – + 优化 – 实现 – 总结 …

Python 2023年9月28日
0120
• #### matplotlib的imshow在Python shell IDLE环境无法显示图像问题

一、引言 最近忙，同时还在学习概率统计知识，已经有点时间没更新博客了，刚好这几天遇到了点小问题，就写篇水文吧。 二、matplotlib的imshow在Python shell I…

Python 2023年8月31日
0102