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

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

一、Matplotlib基础可视化

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

python

复制

下载

复制代码
import matplotlib.pyplot as plt

input_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_subplots

def 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] += 1
    frequencies = {k: v / len(results) for k, v in counts.items()}
    return counts, frequencies

def 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 + die2
        results.append((die1, die2, total))
    return results

num_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] += 1

fig = 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_results

die_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图表到复杂的概率模拟可视化,我们可以看到数据可视化在理解数据和发现规律中的重要作用。无论是简单的数据分析还是复杂的概率模拟,恰当的可视化都能帮助我们获得更深入的洞察。

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

相关推荐
源码之家2 分钟前
计算机毕业设计:Python农产品智能推荐与可视化分析系统 Flask框架 矩阵分解 数据分析 可视化 协同过滤推荐算法 深度学习(建议收藏)✅
python·矩阵·数据挖掘·数据分析·django·flask·课程设计
筱璦3 分钟前
C#期货分仓、策略交易模拟演示系统(含资源下载)
开发语言·c#·策略模式·量化交易·期货交易
Betelgeuse764 分钟前
打通 Django 认证:原生 Auth 组件实战与 API 改造
后端·python·django
froginwe116 分钟前
Highcharts 测量图:全面解析与优化实践
开发语言
m0_515098426 分钟前
如何实现SQL数据分片规则更新_利用触发器同步元数据
jvm·数据库·python
qq_330037996 分钟前
uni-app怎么实现App端蓝牙搜索与连接 uni-app低功耗蓝牙开发【代码】
jvm·数据库·python
带娃的IT创业者7 分钟前
深度解析 Qwen3.6-35B-A3B:重塑 AI 编程代理的开源新标杆
人工智能·python·ai·开源·大模型·qwen·编程代理
qq_654366987 分钟前
SQL中如何通过JOIN实现级联删除_利用外键约束与JOIN辅助
jvm·数据库·python
2301_764150568 分钟前
layui form禁用表单元素 layui如何disable一个输入框
jvm·数据库·python
雪芽蓝域zzs8 分钟前
uni-app x 使用 UTS 语言使用 mixins
开发语言·javascript·uni-app