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

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.xdnf.cn/news/16365.html

相关文章:

  • 【资讯】2025年软件行业发展趋势:AI驱动变革,云原生与安全成核心
  • PHP框架之Laravel框架教程:1. laravel搭建
  • 亚马逊测评采购:如何打造安全的环境,技术基础关键
  • 2025年渗透测试面试题总结-2025年HW(护网面试) 70(题目+回答)
  • Avantage6.6下载与安装教程
  • 差模干扰 共模干扰
  • 【隧道篇 / IPsec】(7.6) ❀ 01. 利用向导快速建立IPsec安全隧道 (点对点) ❀ FortiGate 防火墙
  • 详解力扣高频SQL50题之550. 游戏玩法分析 IV【中等】
  • ClickHouse高性能实时分析数据库-消费实时数据流(消费kafka)
  • MySQL进阶学习与初阶复习第三天
  • CSS3知识补充
  • 如何高效合并音视频文件(时间短消耗资源少)(二)
  • ICMPv4报文类型详解表
  • 人形机器人指南(八)操作
  • Xinference vs SGLang:详细对比分析
  • MybatisPlus-18.插件功能-分页插件基本用法
  • Jmeter的元件使用介绍:(五)定时器详解
  • 无需云服务器的内网穿透方案 -- cloudflare tunnel
  • 【AI周报】2025年7月26日
  • 什么是ICMP报文?有什么用?
  • Android Data Binding 深度解析与实践指南
  • easy-llm-cli的安装和使用
  • 【web应用】基于Vue3和Spring Boot的课程管理前后端数据交互过程
  • Vue 3 与 Element Plus 中的 /deep/ 选择器问题
  • 论文阅读-RaftStereo
  • haproxy配置详解
  • QT核心————信号槽
  • 外带服务的温度:藏在包装里的“生活共情力”
  • [RPA] 日期时间练习案例
  • 二维数组相关学习