当前位置: 首页 > 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.dtcms.com/a/298983.html

相关文章:

  • 震网(Stuxnet):打开潘多拉魔盒的数字幽灵
  • Android ADB命令之内存统计与分析
  • C++对象模型
  • CH341 Linux驱动 没有 /dev/ttyCH341USB0
  • 前端模块化开发实战指南
  • kafka中生产者的数据分发策略
  • starrocks官网docker部署mysql无法连接
  • 影刀RPA_Temu关键词取数_源码解读
  • RK3568笔记九十三:基于RKNN Lite的YOLOv5目标检测
  • 高性能网络DPDK、RDMA、XDP初探
  • VTK交互——ClientData
  • Java程序员学从0学AI(六)
  • Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现轮船检测识别(C#代码UI界面版)
  • 热传导问题Matlab有限元编程 :工业级热仿真核心技术-搭建热传导求解器【含案例源码】
  • CSS3知识补充
  • 【企业架构】TOGAF概念之二
  • 基于深度学习的图像分类:使用Capsule Networks实现高效分类
  • 【Linux手册】操作系统如何管理存储在外设上的文件
  • 用 FFmpeg 把视频输出为图片序列
  • 创建 Vue 项目的 4 种主流方式
  • 小程序的客服咨询(与企业微信建立沟通)
  • [论文阅读] 人工智能 + 软件工程 | NoCode-bench:评估LLM无代码功能添加能力的新基准
  • 使用Python实现单词记忆软件
  • Day 22: 复习
  • Datawhale AI 夏令营—科大讯飞AI大赛(大模型技术)—让大模型理解表格数据(列车信息表)
  • 【影刀RPA_初级课程_我的第一个机器人】
  • .bat 打开方式恢复
  • 秋招Day20 - 微服务 - 概念
  • 大模型应用班-第2课 DeepSeek使用与提示词工程课程重点 学习ollama 安装 用deepseek-r1:1.5b 分析PDF 内容
  • Laravel 中使用 FPDI 实现 PDF 骑缝章功能