前言
在Python中,使用一些库和工具可以创建交互性可视化界面,这对于许多应用场景都非常有用
- 数据分析和可视化:对于数据科学家和分析师来说,交互性可视化界面是探索和呈现数据的有力工具。使用工具如:Pivottablejs、Plotly、Bokeh等,可以创建交互性的图表和图形,让用户能够直观地理解数据趋势、关系和分布
- 机器学习模型展示:在机器学习领域,通过交互性可视化界面可以展示模型的性能、参数调整和预测结果。例如使用Dash或Streamlit可以创建Web应用程序,展示机器学习模型的实时预测
- 科学和工程模拟:对于科学家和工程师,交互性可视化界面可用于展示模拟结果、实验数据和系统行为。这有助于调整参数、优化设计,并直观地观察系统的变化
- 控制面板和配置工具:对于一些工程应用,交互性可视化界面可用于创建控制面板,让用户能够调整系统设置、启动任务,并监控实时状态。这对于设备控制、自动化系统等方面很有用
- 教育和培训:创建交互性可视化界面可以提高教育和培训的效果。学生和培训人员可以通过图形化的方式更好地理解复杂的概念和流程
总的来说,交互性可视化界面可以增强用户体验,使得数据和信息更容易理解,也能够提供更直观的方式来与程序、模型或系统进行互动。
代码实现
pivottablejs
Pivottablejs是一个通过IPython widgets集成到Python中的JavaScript库,允许用户直接从DataFrame数据创建交互式和灵活的汇总报表。可以进行高效、清晰的数据分析和表示,帮助将数据从Pandas DataFrame转换为易于观察的交互式数据透视表,便于对数据进行探索和分析,特别是在处理大型数据集或希望为用户提供灵活工具以探索数据关系时非常有用。
from ucimlrepo import fetch_ucirepo
# fetch dataset
hcv_data = fetch_ucirepo(id=571)
# data (as pandas dataframes)
X = hcv_data.data.features
X.head()
数据集为UCI中的HCV数据该数据集包含献血者和丙型肝炎患者的实验室值以及年龄等人口统计学值。
from pivottablejs import pivot_ui
pivot_ui(X)
利用Pivottablejs生成交互式的数据透视表,通过在表格上拖动字段以及对字段进行放置,实现对数据的动态汇总和分析,以更直观地理解数据的关系
Plotly
是一个用于创建交互式可视化的开源库,支持多种编程语言,包括 Python、R、JavaScript 和 Julia。在这里,将主要解释 Plotly Python 库,用于在 Python 中创建各种交互式图表。主要特点: 交互性:Plotly 提供了丰富的交互功能,用户可以在图表上进行缩放、平移、查看数据标签等操作。这使得用户能够更深入地探索数据。支持多种图表类型:Plotly 支持各种常见的图表类型,包括散点图、线图、柱状图、饼图、热图、气泡图等。它还支持3D图和地理空间图。美观的默认样式:Plotly 提供了漂亮和直观的默认样式,使得用户可以轻松创建具有专业外观的图表。容易导出和共享:用户可以将 Plotly 图表导出为静态图像或交互式 HTML 文件,方便在报告、网页或在线平台上共享。支持 Jupyter 环境:Plotly 可以直接在 Jupyter Notebook 中使用,并且在该环境中提供了方便的交互功能。
交互折线图
import plotly.express as px
import pandas as pd
# 创建示例数据
a = {
'time': pd.date_range('2023-01-01', '2023-01-10'),
'Value': [10, 15, 7, 23, 18, 25, 12, 20, 15, 30]
}
df = pd.DataFrame(a)
# 使用 Plotly Express 创建交互式线图
fig = px.line(df, x='time', y='Value', title='Interactive Line Chart')
# 显示图形
fig.show()
交互散点图
# 使用 Plotly Express 创建交互式散点图
fig = px.scatter(X, x='AST', y='ALB', title='Interactive Line Chart')
# 显示图形
fig.show()
交互饼图
# 使用 Plotly Express 创建交互式饼图
fig = px.pie(X, names='Sex', title='Sex')
# 显示图形
fig.show()
交互柱状图
# 使用 Plotly Express 创建交互式柱状图
fig = px.bar(X, x='Age', y='ALB')
# 显示图形
fig.show()
交互性气泡图
# 创建一个示例数据集
a = {
'Country': ['USA', 'Canada', 'Germany', 'UK', 'France'],
'Population': [327, 38, 83, 67, 65],
'GDP': [21.43, 1.84, 4.42, 2.62, 2.78],
'Happiness_Index': [7.2, 7.6, 6.9, 7.4, 6.5]
}
df = pd.DataFrame(a)
# 使用 Plotly Express 创建气泡图
fig = px.scatter(df, x='GDP', y='Happiness_Index', size='Population', color='Country',
hover_name='Country', size_max=60)
# 设置图表布局
fig.update_layout(
title='GDP vs Happiness Index (Bubble Chart)',
xaxis=dict(title='GDP (Trillion USD)'),
yaxis=dict(title='Happiness Index'),
)
# 显示图表
fig.show()
Bokeh
是一个用于创建交互式数据可视化的 Python 库。它是一个开源项目,旨在让用户能够构建专业水平的交互式图表,支持现代的Web浏览器中的数据探索。主要特点:交互性:Bokeh 提供了强大的交互功能,允许用户在图表上进行缩放、平移、选取数据点、定制工具等。这些功能在 Web 浏览器中以 JavaScript 实现,使得用户能够直接在浏览器中与图表进行交互。多种图表类型:Bokeh 支持各种常见的图表类型,包括散点图、线图、柱状图、饼图、热图、等高线图等。它还支持3D图表和地理空间图表。布局和小部件:Bokeh 提供了灵活的布局选项,用户可以组织多个图表并创建复杂的仪表板。它还包括小部件(widgets),例如滑块、按钮、文本输入框等,使用户能够通过仪表板进行实时控制和交互。服务器端应用:Bokeh 提供了 Bokeh Server,允许用户构建具有更高级交互性和实时数据更新的数据可视化应用程序。支持 Jupyter 环境:Bokeh 可以嵌入到 Jupyter Notebook 中,使用户能够在笔记本中创建交互式图表。
交互散点图
import numpy as np
from bokeh.plotting import figure, show, output_file
from bokeh.models import ColumnDataSource, HoverTool
from bokeh.palettes import Viridis256
# 生成两组包含 100 行的随机数据
np.random.seed(42)
data_size = 100
x_data_1 = np.random.rand(data_size)
y_data_1 = np.random.rand(data_size)
x_data_2 = np.random.rand(data_size)
y_data_2 = np.random.rand(data_size)
colors_1 = Viridis256[:data_size] # 使用 Viridis 调色板
colors_2 = Viridis256[data_size:2*data_size] # 使用 Viridis 调色板
# 创建 ColumnDataSource 对象
source_1 = ColumnDataSource(data=dict(x=x_data_1, y=y_data_1, colors=colors_1))
source_2 = ColumnDataSource(data=dict(x=x_data_2, y=y_data_2, colors=colors_2))
# 创建散点图
p = figure(title="Random Scatter Plot", tools="pan,box_zoom,reset", width=600, height=400)
# 添加散点,分别为两组数据添加图例标签
p.circle('x', 'y', size=15, source=source_1, color='colors', legend_label="Data 1")
p.circle('x', 'y', size=15, source=source_2, color='colors', legend_label="Data 2")
# 设置图形样式
p.title.text_font_size = '20pt'
p.title.align = 'center'
p.xaxis.axis_label = 'X-Axis'
p.yaxis.axis_label = 'Y-Axis'
p.axis.major_label_text_font_size = '12pt'
p.legend.label_text_font_size = '14pt'
# 添加悬停工具
hover = HoverTool()
hover.tooltips = [("X", "@x"), ("Y", "@y")]
p.add_tools(hover)
# 设置保存路径为 'random_scatter_plot.html'
output_file('random_scatter_plot.html')
# 显示图形
show(p)
交互折线图散点图
from bokeh.plotting import figure, show
from bokeh.models import LinearAxis, Range1d
# 示例数据
x = range(1, 101)
y = np.random.rand(len(x))
# 创建线图
p = figure(title="Beautiful Line Plot", x_axis_label='X-axis', y_axis_label='Y-axis',
width=800, height=400)
# 添加线
line = p.line(x, y, line_width=2, line_color="blue", legend_label="Line")
# 设置图形样式
p.title.text_font_size = '20pt'
p.title.align = 'center'
p.xaxis.axis_label_text_font_size = '14pt'
p.yaxis.axis_label_text_font_size = '14pt'
p.xaxis.major_label_text_font_size = '12pt'
p.yaxis.major_label_text_font_size = '12pt'
# 设置坐标轴范围
p.x_range = Range1d(0, 110)
p.y_range = Range1d(0, 1.2)
# 添加网格线
p.grid.grid_line_color = 'lightgray'
p.grid.grid_line_alpha = 0.5
# 添加第二个 y 轴
p.extra_y_ranges = {"second_y_axis": Range1d(start=-5, end=5)}
p.add_layout(LinearAxis(y_range_name="second_y_axis"), 'right')
# 添加散点
p.circle(x, y, size=8, color="red", legend_label="Points", y_range_name="second_y_axis")
# 设置图例位置
p.legend.location = "top_left"
p.legend.label_text_font_size = '14pt'
# 设置保存路径为 'beautiful_line_plot.html'
output_file('beautiful_line_plot.html')
# 显示图形
show(p)
交互性柱状图
from bokeh.plotting import figure, show
# 示例数据
categories = ['Category A', 'Category B', 'Category C']
values = [4, 7, 2]
# 创建柱状图
p = figure(x_range=categories, title="Bar Chart", x_axis_label='Categories', y_axis_label='Values')
p.vbar(x=categories, top=values, width=0.9)
output_file('Bar Chart.html')
# 显示图形
show(p)
交互性热图
import numpy as np
from bokeh.plotting import figure, show, output_file
from bokeh.transform import linear_cmap
from bokeh.models import ColorBar
from bokeh.palettes import Viridis256
from bokeh.models import ColumnDataSource
# 生成随机数据(4x4 矩阵)
data = np.random.rand(4, 4)
# 创建 ColumnDataSource
source = ColumnDataSource(data=dict(
x=np.repeat([str(i) for i in range(data.shape[0])], data.shape[1]),
y=np.tile([str(i) for i in range(data.shape[1])], data.shape[0]),
value=data.flatten()
))
# 创建颜色映射
mapper = linear_cmap(field_name='value', palette=Viridis256, low=data.min(), high=data.max())
# 创建热图
p = figure(title="Heatmap", toolbar_location=None, tools="hover",
x_range=list(map(str, range(data.shape[0]))),
y_range=list(map(str, range(data.shape[1]))))
# 渲染矩形
p.rect(x='x', y='y', width=1, height=1, line_color="white", fill_color=mapper, source=source)
# 设置图形样式
p.title.text_font_size = '20pt'
p.title.align = 'center'
p.axis.axis_label = None
p.axis.major_label_text_font_size = '12pt'
p.axis.major_label_orientation = 'vertical'
p.axis.major_tick_line_color = None
p.axis.minor_tick_line_color = None
p.grid.grid_line_color = None
# 添加颜色条
color_bar = ColorBar(color_mapper=mapper['transform'], width=8, location=(0, 0))
p.add_layout(color_bar, 'right')
# 设置保存路径为 'beautiful_heatmap.html'
output_file('beautiful_heatmap.html')
# 显示图形
show(p)
以上就是“python交互性可视化”的全部内容,希望对你有所帮助。
关于Python技术储备
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
三、Python视频合集
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
四、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
五、Python练习题
检查学习结果。
六、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
最后祝大家天天进步!!
上面这份完整版的Python全套学习资料已经上传至CSDN官方,朋友如果需要可以直接微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】。