从入门到精通:Python 可视化实战,这一篇就够了(含完整代码)

本文将介绍如何使用 Python 创建精美的数据可视化图案,并通过一个完整案例展示其强大功能。

Python作为数据科学领域最受欢迎的编程语言之一,提供了丰富的可视化库。本文将介绍如何使用Python创建精美的数据可视化图案,并通过一个完整案例展示其强大功能。

一、主流可视化库介绍

Python中常用的可视化库包括:

  • Matplotlib:最基础、最常用的绘图库,提供了类似MATLAB的绘图接口
  • Seaborn:基于Matplotlib,提供了更美观的默认样式和高级统计图表
  • Plotly:支持交互式可视化,可生成动态图表
  • Bokeh:专注于Web浏览器的交互式可视化

二、案例:销售数据多维度分析可视化

下面通过一个实际案例,展示如何创建包含多个子图的综合性数据可视化仪表板。我们将模拟一年的产品销售数据,并从多个角度进行可视化分析。

1. 数据准备

首先生成模拟的销售数据,包括日期、销售额、产品类别、地区等维度。为确保结果可复现,我们设置随机种子为42。

2. 可视化设计

我们将创建一个包含四个子图的仪表板:

  • 折线图:展示月度销售趋势,观察销售额随时间的变化规律
  • 柱状图:对比不同产品类别的总销售额
  • 饼图:展示各地区销售额占比
  • 散点图:分析销售额与订单数量的相关性
3. 完整代码实现

下面是完整的代码实现,包含数据生成和可视化绘制:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime, timedelta
import seaborn as sns
import warnings

# 忽略字体警告
warnings.filterwarnings('ignore')

# 设置随机种子
np.random.seed(42)

# ====== 关键修改:中文字体配置 ======
# Windows用户使用以下配置
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'SimHei', 'Arial Unicode MS']
plt.rcParams['axes.unicode_minus'] = False

# 如果上述字体都不可用,可以尝试:
# plt.rcParams['font.family'] = ['sans-serif']
# plt.rcParams['font.sans-serif'] = ['DejaVu Sans']
# 然后把中文换成英文标签

sns.set_style("whitegrid")

# 生成模拟销售数据
def generate_sales_data(n_records=365):
    """生成一年的销售数据"""
    start_date = datetime(2023, 1, 1)
    dates = [start_date + timedelta(days=x) for x in range(n_records)]
    
    categories = ['Electronics', 'Clothing', 'Food', 'Books', 'Home']  # 使用英文
    regions = ['East', 'North', 'South', 'Southwest', 'Northeast']
    
    data = {
        'Date': dates,
        'Sales': np.random.normal(50000, 15000, n_records).clip(min=10000),
        'Orders': np.random.poisson(100, n_records),
        'Category': np.random.choice(categories, n_records),
        'Region': np.random.choice(regions, n_records)
    }
    
    return pd.DataFrame(data)

# 生成数据
df = generate_sales_data()

# 创建图形
fig = plt.figure(figsize=(16, 10))
fig.suptitle('Sales Data Dashboard', fontsize=20, fontweight='bold', y=0.995)

# 1. 月度销售趋势
ax1 = plt.subplot(2, 2, 1)
monthly_sales = df.groupby(df['Date'].dt.to_period('M'))['Sales'].sum()
monthly_sales.index = monthly_sales.index.to_timestamp()
ax1.plot(monthly_sales.index, monthly_sales.values, 
         marker='o', linewidth=2.5, markersize=8, color='#2E86AB')
ax1.fill_between(monthly_sales.index, monthly_sales.values, alpha=0.3, color='#2E86AB')
ax1.set_title('Monthly Sales Trend', fontsize=14, fontweight='bold', pad=15)
ax1.set_xlabel('Month', fontsize=11)
ax1.set_ylabel('Sales Amount', fontsize=11)
ax1.grid(True, alpha=0.3)

# 2. 产品类别销售额
ax2 = plt.subplot(2, 2, 2)
category_sales = df.groupby('Category')['Sales'].sum().sort_values(ascending=False)
colors = sns.color_palette("husl", len(category_sales))
bars = ax2.bar(range(len(category_sales)), category_sales.values, color=colors, alpha=0.8)
ax2.set_title('Sales by Category', fontsize=14, fontweight='bold', pad=15)
ax2.set_xlabel('Category', fontsize=11)
ax2.set_ylabel('Total Sales', fontsize=11)
ax2.set_xticks(range(len(category_sales)))
ax2.set_xticklabels(category_sales.index, rotation=15)
ax2.grid(True, alpha=0.3, axis='y')

for bar in bars:
    height = bar.get_height()
    ax2.text(bar.get_x() + bar.get_width()/2., height,
             f'{int(height/10000)}w',
             ha='center', va='bottom', fontsize=9)

# 3. 地区销售占比
ax3 = plt.subplot(2, 2, 3)
region_sales = df.groupby('Region')['Sales'].sum()
colors_pie = sns.color_palette("Set2", len(region_sales))
wedges, texts, autotexts = ax3.pie(region_sales.values, 
                                     labels=region_sales.index,
                                     autopct='%1.1f%%',
                                     colors=colors_pie,
                                     startangle=90,
                                     textprops={'fontsize': 10})
ax3.set_title('Sales by Region', fontsize=14, fontweight='bold', pad=15)
for autotext in autotexts:
    autotext.set_color('white')
    autotext.set_fontweight('bold')

# 4. 散点图
ax4 = plt.subplot(2, 2, 4)
scatter = ax4.scatter(df['Orders'], df['Sales'], 
                     c=df['Sales'], cmap='viridis', 
                     alpha=0.6, s=50, edgecolors='black', linewidth=0.5)
ax4.set_title('Sales vs Orders', fontsize=14, fontweight='bold', pad=15)
ax4.set_xlabel('Order Count', fontsize=11)
ax4.set_ylabel('Sales Amount', fontsize=11)
ax4.grid(True, alpha=0.3)

z = np.polyfit(df['Orders'], df['Sales'], 1)
p = np.poly1d(z)
ax4.plot(df['Orders'].sort_values(), 
         p(df['Orders'].sort_values()),
         "r--", linewidth=2, alpha=0.8, label='Trend Line')
ax4.legend(fontsize=10)

cbar = plt.colorbar(scatter, ax=ax4)
cbar.set_label('Sales', fontsize=10)

plt.tight_layout()
plt.show()

print("=" * 50)
print("Data Summary")
print("=" * 50)
print(f"\nTotal Sales: {df['Sales'].sum():,.0f}")
print(f"Average Daily Sales: {df['Sales'].mean():,.0f}")
print(f"Total Orders: {df['Orders'].sum():,}")

4. 代码解析

数据生成部分:

  • 使用np.random.seed(42)设置随机种子,确保每次运行生成相同的数据
  • 生成365天的销售数据,包含日期、销售额、订单数量、产品类别和地区信息
  • 销售额服从正态分布,订单数量服从泊松分布,更贴近实际情况

可视化部分:

  • 使用subplot创建2×2的子图布局
  • 折线图展示时间序列趋势,使用填充效果增强视觉效果
  • 柱状图使用不同颜色区分类别,并添加数值标签
  • 饼图直观展示比例关系
  • 散点图使用颜色映射表示第三维度数据,并添加趋势线
5. 运行效果

运行上述代码后,将生成一个包含四个子图的综合仪表板,清晰展示销售数据的多个维度。同时,控制台会输出关键统计指标,帮助快速了解数据概况。

三、可视化设计建议

  • 颜色搭配:使用协调的配色方案,避免过于刺眼的颜色
  • 标题和标签:确保所有图表都有清晰的标题和坐标轴标签
  • 数据标注:在关键数据点添加标注,提高可读性
  • 布局合理:合理安排子图位置,保持整体美观
  • 交互性:必要时可以使用Plotly等库添加交互功能

四、总结

Python的可视化生态系统为数据分析提供了强大支持。通过合理使用Matplotlib、Seaborn等工具,我们可以创建既美观又实用的数据可视化图表。关键是要根据数据特点选择合适的图表类型,并注重细节设计,让可视化真正发挥传递信息的作用。

AI大模型学习福利

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获取

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。


因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获

四、AI大模型商业化落地方案

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值