当前位置: 首页 > news >正文

PYTHON从入门到实践-15数据可视化

数据可视化是数据分析中不可或缺的一环,它能够将抽象的数据转化为直观的图形,帮助我们更好地理解数据特征和发现潜在规律。本文将介绍如何使用Python中的Matplotlib和Plotly库进行数据可视化,并通过掷骰子的概率模拟案例展示可视化的实际应用。

一、Matplotlib基础可视化

Matplotlib是Python中最基础也是最常用的数据可视化库之一。我们先从一个简单的平方数可视化开始:

python

复制

下载

import matplotlib.pyplot as pltinput_values = [1, 2, 3, 4, 5, 6, 7, 8]
squares = [1, 4, 9, 16, 25, 36, 49, 64]plt.style.use('dark_background')  # 使用暗色背景主题
fig, ax = plt.subplots()
ax.plot(input_values, squares, linewidth=3)
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_title('Average square number')
ax.tick_params(axis='both', which='major', labelsize=14)
plt.show()

这段代码展示了如何创建一个简单的折线图,并设置了图表标题、坐标轴标签等基本元素。Matplotlib提供了多种内置样式,通过plt.style.available可以查看所有可用的样式。

二、Plotly交互式可视化

Plotly是一个强大的交互式可视化库,特别适合创建复杂的统计图表。下面我们使用Plotly来模拟掷骰子的概率分布。

1. 单骰子模拟

python

复制

下载

import random
import plotly.graph_objects as go
from plotly.subplots import make_subplotsdef roll_dice(num_rolls, dice_sides=6):return [random.randint(1, dice_sides) for _ in range(num_rolls)]def analyze_results(results, dice_sides=6):counts = {i: 0 for i in range(1, dice_sides + 1)}for result in results:counts[result] += 1frequencies = {k: v / len(results) for k, v in counts.items()}return counts, frequenciesdef simulate_dice_rolls(num_rolls=1000, dice_sides=6):results = roll_dice(num_rolls, dice_sides)counts, frequencies = analyze_results(results, dice_sides)fig = make_subplots(rows=1, cols=2, subplot_titles=('出现次数', '出现频率'))fig.add_trace(go.Bar(x=list(counts.keys()), y=list(counts.values()),name='出现次数', marker_color='skyblue'),row=1, col=1)fig.add_trace(go.Bar(x=list(frequencies.keys()), y=list(frequencies.values()),name='出现频率', marker_color='lightgreen'),row=1, col=2)fig.update_layout(title=f'模拟掷{dice_sides}面骰子 {num_rolls}次的结果',showlegend=False,xaxis_title='骰子点数',yaxis_title='出现次数',xaxis2_title='骰子点数',yaxis2_title='出现频率',template='plotly_white')fig.show()simulate_dice_rolls(num_rolls=1000, dice_sides=6)

这段代码模拟了1000次掷骰子的结果,并同时展示了每个点数出现的次数和频率。通过子图的方式,我们可以直观地比较绝对数量和相对频率。

2. 双骰子模拟

python

复制

下载

def roll_dice(num_rolls):results = []for _ in range(num_rolls):die1 = random.randint(1, 6)die2 = random.randint(1, 6)total = die1 + die2results.append((die1, die2, total))return resultsnum_rolls = 1000
results = roll_dice(num_rolls)
totals = [result[2] for result in results]sum_counts = {i: 0 for i in range(2, 13)}
for total in totals:sum_counts[total] += 1fig = make_subplots(rows=1, cols=2, subplot_titles=('骰子和分布', '单个骰子点数分布'))fig.add_trace(go.Bar(x=list(sum_counts.keys()), y=list(sum_counts.values()),name='骰子和', marker_color='skyblue'),row=1, col=1
)die1_results = [result[0] for result in results]
die2_results = [result[1] for result in results]
all_die_results = die1_results + die2_resultsdie_counts = {i: all_die_results.count(i) for i in range(1, 7)}fig.add_trace(go.Bar(x=list(die_counts.keys()), y=list(die_counts.values()),name='单个骰子点数', marker_color='lightgreen'),row=1, col=2
)fig.update_layout(title_text=f'模拟掷两个骰子 {num_rolls} 次的结果',showlegend=False,xaxis_title='骰子和',yaxis_title='出现次数',xaxis2_title='骰子点数',yaxis2_title='出现次数'
)fig.show()

双骰子模拟展示了两个骰子点数之和的分布以及单个骰子的点数分布。从结果中我们可以观察到骰子和的分布呈现出对称的钟形曲线,而单个骰子的点数则保持均匀分布。

三、可视化技巧与最佳实践

  1. 选择合适的图表类型:根据数据类型选择合适的图表,如折线图适合展示趋势,柱状图适合比较分类数据。

  2. 合理使用颜色:使用对比明显的颜色突出重要数据,但避免使用过多颜色造成视觉混乱。

  3. 添加适当的标签和标题:确保图表有清晰的标题、坐标轴标签和图例。

  4. 考虑交互性:在需要详细探索数据时,使用Plotly等支持交互的库。

  5. 保持简洁:避免过度装饰,保持图表简洁易读。

四、总结

本文通过实际代码示例展示了如何使用Python进行数据可视化。从基础的Matplotlib图表到复杂的概率模拟可视化,我们可以看到数据可视化在理解数据和发现规律中的重要作用。无论是简单的数据分析还是复杂的概率模拟,恰当的可视化都能帮助我们获得更深入的洞察。

在实际应用中,可以根据需求选择合适的可视化工具和图表类型,并遵循可视化最佳实践,创建出既美观又富有信息量的图表。

http://www.lryc.cn/news/601102.html

相关文章:

  • 方案C,version2
  • 主要分布在腹侧海马体(vHPC)CA1区域(vCA1)的混合调谐细胞(mixed-tuning cells)对NLP中的深层语义分析的积极影响和启示
  • 深度解析 noisereduce:开源音频降噪库实践
  • C 与 C++ 的区别:发展、特性及优缺点详解
  • 对比JS“上下文”与“作用域”
  • 秋招Day19 - 分布式 - 分布式设计
  • RoPE:相对位置编码的旋转革命——原理、演进与大模型应用全景
  • LChot100--128. 最长连续序列
  • 前缀和-238-除自身以外数组的乘积-力扣(LeetCode)
  • 基于深度学习的图像分类:使用Inception-v3实现高效分类
  • FastAPI入门:demo、路径参数、查询参数
  • GPU运维常见问题处理
  • Vibe Coding | 技术让我们回归了创造的本质
  • 基于深度学习的图像分类:使用Capsule Networks实现高效分类
  • 【HTML】<script>元素中的 defer 和 async 属性详解
  • 前端开发 Vue 结合Sentry 实现性能监控
  • 掌握JavaScript函数封装与作用域
  • LeetCode 895:最大频率栈
  • 【micro:bit】从入门到放弃(六):示例蜂鸣器音乐、摇色子、光照强度、串口调试、麦克风
  • C++/CLI与标准C++的语法差异(一)
  • 大话数据结构之 < 栈>(C语言)
  • Pspice仿真电路:(三十四)如何使用Pspcie进行仿真
  • 每日一题【删除有序数组中的重复项 II】
  • k8s之控制器详解
  • 基于springboot的图书借阅系统
  • mysql-数据表-DDL语句
  • Python爬虫实战:诗词名句网《三国演义》全集
  • Redis C++客户端——通用命令
  • 相机标定相关原理
  • FitCoach AI:基于React+CloudBase的智能健身教练应用开发全解析