第一步:环境准备

首先,你需要安装必要的库。主要使用:

· Matplotlib - 最基础的可视化库

· Seaborn - 基于Matplotlib的统计可视化库

· Pandas - 数据处理


第二步:第一个简单图表

让我们从最简单的折线图开始:

 

import matplotlib.pyplot as plt

import numpy as np

# 创建数据

x = np.linspace(0, 10, 100) # 0到10之间的100个点

y = np.sin(x) # 正弦函数

# 创建图表

plt.figure(figsize=(10, 5)) # 设置图形大小

plt.plot(x, y, label='sin(x)') # 绘制折线图

plt.title('简单的正弦函数图') # 标题

plt.xlabel('X轴') # X轴标签

plt.ylabel('Y轴') # Y轴标签

plt.legend() # 显示图例

plt.grid(True) # 显示网格

plt.show() # 显示图形

 


 

第三步:多种基础图表

 

1. 散点图

# 创建随机数据

np.random.seed(42) # 设置随机种子,保证结果可重复

x = np.random.randn(100)

y = np.random.randn(100)

colors = np.random.rand(100)

sizes = 100 * np.random.rand(100)

 

plt.figure(figsize=(10, 6))

plt.scatter(x, y, c=colors, s=sizes, alpha=0.6)

plt.title('散点图示例')

plt.xlabel('X值')

plt.ylabel('Y值')

plt.colorbar() # 显示颜色条

plt.show()

 

 

2. 柱状图

# 柱状图数据

categories = ['A', 'B', 'C', 'D', 'E']

values = [23, 45, 56, 12, 67]

 

plt.figure(figsize=(10, 6))

plt.bar(categories, values, color=['red', 'blue', 'green', 'orange', 'purple'])

plt.title('柱状图示例')

plt.xlabel('类别')

plt.ylabel('数值')

plt.show()

 

 

3. 直方图

 

# 生成正态分布数据

data = np.random.normal(0, 1, 1000)

 

plt.figure(figsize=(10, 6))

plt.hist(data, bins=30, alpha=0.7, color='skyblue', edgecolor='black')

plt.title('数据分布直方图')

plt.xlabel('数值')

plt.ylabel('频数')

plt.show()


第四步:Seaborn 数据可视化

Seaborn基于Matplotlib,提供了更美观的默认样式和更高级的统计图表。

 

1. 首先加载示例数据集

import seaborn as sns

import pandas as pd

 

# 加载内置数据集

tips = sns.load_dataset('tips')

print("数据集前5行:")

print(tips.head())

 

print("\n数据集信息:")

print(tips.info())

 

2. Seaborn 基础图表

 

# 设置样式

sns.set_style("whitegrid")

 

# 箱线图

plt.figure(figsize=(10, 6))

sns.boxplot(x='day', y='total_bill', data=tips)

plt.title('每天消费金额的箱线图')

plt.show()

 

 

3. 小提琴图

 

plt.figure(figsize=(10, 6))

sns.violinplot(x='day', y='total_bill', hue='sex', data=tips, split=True)

plt.title('按性别分组的小提琴图')

plt.show()

 

 

4. 热力图

 

# 创建相关性矩阵

corr = tips.corr()

 

plt.figure(figsize=(8, 6))

sns.heatmap(corr, annot=True, cmap='coolwarm', center=0)

plt.title('变量相关性热力图')

plt.show()

 

 

5. 成对关系图

 

# 选择数值列进行成对分析

numeric_tips = tips.select_dtypes(include=['float64', 'int64'])

sns.pairplot(numeric_tips)

plt.suptitle('变量成对关系图', y=1.02)

plt.show()


 

第五步:Pandas 简易可视化

 

1. 基础线图

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

 

# 创建简单数据

df = pd.DataFrame({

    'A': np.random.randn(100).cumsum(),

    'B': np.random.randn(100).cumsum() + 10,

    'C': np.random.randn(100).cumsum() + 5

})

 

# 一行代码绘制所有列的线图

df.plot(figsize=(10, 6), title='三组数据趋势图')

plt.show()

 

 

2. 柱状图

 

# 创建分类数据

data = {

    '苹果': 25,

    '香蕉': 30, 

    '橙子': 20,

    '葡萄': 35

}

 

# 转换为DataFrame并绘图

fruit_df = pd.DataFrame(list(data.items()), columns=['水果', '销量'])

fruit_df.set_index('水果')['销量'].plot(kind='bar', color='lightblue')

plt.title('水果销量柱状图')

plt.ylabel('销量')

plt.show()

 

 

3. 直方图

 

# 生成随机数据

scores = pd.DataFrame({'分数': np.random.normal(75, 10, 1000)})

 

# 绘制直方图

scores['分数'].plot(kind='hist', bins=20, alpha=0.7, color='green')

plt.title('分数分布直方图')

plt.xlabel('分数')

plt.show()

 

 

4. 饼图

# 市场份额数据

market_share = pd.Series({

    '公司A': 35,

    '公司B': 25,

    '公司C': 20,

    '公司D': 15,

    '其他': 5

})

 

# 绘制饼图

market_share.plot(kind='pie', autopct='%1.1f%%', figsize=(8, 8))

plt.title('市场份额分布')

plt.ylabel('') # 隐藏y轴标签

plt.show()

 

 

5. 散点图

 

# 创建身高体重数据

height_weight = pd.DataFrame({

    '身高': np.random.normal(170, 10, 50),

    '体重': np.random.normal(65, 15, 50)

})

 

# 散点图

height_weight.plot(kind='scatter', x='身高', y='体重', 

                  alpha=0.6, color='red', figsize=(8, 6))

plt.title('身高体重关系散点图')

plt.grid(True)

plt.show()

 

 

6. 箱线图

 

# 创建多组数据

groups = pd.DataFrame({

    '组1': np.random.normal(0, 1, 100),

    '组2': np.random.normal(2, 1.5, 100),

    '组3': np.random.normal(-1, 0.8, 100)

})

 

# 箱线图

groups.plot(kind='box', figsize=(8, 6))

plt.title('三组数据分布箱线图')

plt.ylabel('数值')

plt.show()

 

 

7. 面积图

 

# 创建时间序列数据

months = pd.date_range('2023-01', periods=12, freq='M')

revenue = pd.DataFrame({

    '产品A': np.random.randint(100, 200, 12),

    '产品B': np.random.randint(80, 150, 12),

    '产品C': np.random.randint(50, 120, 12)

}, index=months)

 

# 面积图

revenue.plot(kind='area', alpha=0.6, figsize=(10, 6))

plt.title('月度收入面积图')

plt.ylabel('收入')

plt.show()

 

 

Logo

永洪科技,致力于打造全球领先的数据技术厂商,具备从数据应用方案咨询、BI、AIGC智能分析、数字孪生、数据资产、数据治理、数据实施的端到端大数据价值服务能力。

更多推荐