欢迎光临殡葬白事网
详情描述

一、Matplotlib 散点图

基本用法

import matplotlib.pyplot as plt
import numpy as np

# 生成示例数据
np.random.seed(42)
x = np.random.randn(100)
y = np.random.randn(100)
sizes = np.random.rand(100) * 100  # 点的大小
colors = np.random.rand(100)  # 点的颜色

# 创建散点图
plt.figure(figsize=(10, 6))
scatter = plt.scatter(
    x, y,
    s=sizes,  # 点的大小
    c=colors,  # 颜色
    alpha=0.6,  # 透明度
    cmap='viridis',  # 颜色映射
    edgecolors='black',  # 边缘颜色
    linewidth=0.5
)

# 添加颜色条
plt.colorbar(scatter, label='Color Value')

# 添加标签和标题
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.title('Matplotlib 散点图示例')
plt.grid(True, alpha=0.3)

# 显示图形
plt.show()

分类散点图

import pandas as pd

# 创建分类数据
data = {
    'x': np.random.randn(150),
    'y': np.random.randn(150),
    'category': np.random.choice(['A', 'B', 'C'], 150)
}
df = pd.DataFrame(data)

# 不同类别用不同颜色
plt.figure(figsize=(10, 6))
for category in df['category'].unique():
    subset = df[df['category'] == category]
    plt.scatter(
        subset['x'], subset['y'],
        label=category,
        s=50,
        alpha=0.7
    )

plt.legend(title='类别')
plt.xlabel('特征X')
plt.ylabel('特征Y')
plt.title('分类散点图')
plt.grid(True, alpha=0.3)
plt.show()

二、Seaborn 散点图

基本用法

import seaborn as sns
import pandas as pd

# 使用内置数据集
tips = sns.load_dataset('tips')

# 创建散点图
plt.figure(figsize=(10, 6))
sns.scatterplot(
    data=tips,
    x='total_bill',
    y='tip',
    hue='day',  # 按天着色
    size='size',  # 按大小分组
    sizes=(50, 200),  # 大小范围
    alpha=0.7,
    palette='Set2'
)

plt.title('Seaborn 散点图 - 小费数据')
plt.xlabel('总账单')
plt.ylabel('小费')
plt.legend(title='星期', bbox_to_anchor=(1.05, 1), loc='upper left')
plt.tight_layout()
plt.show()

散点图矩阵(Pairplot)

# 散点图矩阵(适用于多变量分析)
iris = sns.load_dataset('iris')

sns.pairplot(
    iris,
    hue='species',  # 按物种着色
    palette='husl',
    diag_kind='kde',  # 对角线使用核密度估计
    markers=['o', 's', 'D'],  # 不同标记
    plot_kws={'alpha': 0.7, 's': 50}
)

plt.suptitle('鸢尾花数据集 - 散点图矩阵', y=1.02)
plt.show()

带有回归线的散点图

plt.figure(figsize=(10, 6))
sns.regplot(
    data=tips,
    x='total_bill',
    y='tip',
    scatter_kws={'alpha': 0.6, 's': 50},
    line_kws={'color': 'red', 'linewidth': 2},
    ci=95  # 置信区间
)

plt.title('带有回归线的散点图')
plt.xlabel('总账单')
plt.ylabel('小费')
plt.show()

三、Pyecharts 散点图

基本用法

from pyecharts import options as opts
from pyecharts.charts import Scatter
import random

# 生成示例数据
x_data = [random.randint(0, 100) for _ in range(50)]
y_data = [random.randint(0, 100) for _ in range(50)]

# 创建散点图
scatter = (
    Scatter()
    .add_xaxis(x_data)
    .add_yaxis(
        "数据点",
        y_data,
        symbol_size=20,
        label_opts=opts.LabelOpts(is_show=False)
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(title="Pyecharts 散点图"),
        xaxis_opts=opts.AxisOpts(
            name="X轴",
            type_="value",
            splitline_opts=opts.SplitLineOpts(is_show=True)
        ),
        yaxis_opts=opts.AxisOpts(
            name="Y轴",
            type_="value",
            splitline_opts=opts.SplitLineOpts(is_show=True)
        ),
        tooltip_opts=opts.TooltipOpts(
            trigger="item",
            formatter="{a}: ({c})"
        ),
        visualmap_opts=opts.VisualMapOpts(
            min_=min(y_data),
            max_=max(y_data),
            dimension=1,
            orient="horizontal",
            pos_left="center",
            range_color=["#313695", "#4575b4", "#74add1", "#abd9e9", 
                        "#e0f3f8", "#ffffbf", "#fee090", "#fdae61", 
                        "#f46d43", "#d73027", "#a50026"]
        )
    )
)

scatter.render("pyecharts_scatter.html")  # 保存为HTML文件
# scatter.render_notebook()  # Jupyter中直接显示

多系列散点图

from pyecharts.charts import Scatter
import pandas as pd
import numpy as np

# 创建多系列数据
np.random.seed(42)
data = pd.DataFrame({
    'x': np.random.randn(100),
    'y': np.random.randn(100),
    'category': np.random.choice(['Group A', 'Group B', 'Group C'], 100),
    'value': np.random.rand(100) * 100
})

# 分组数据
groups = {}
for category in data['category'].unique():
    group_data = data[data['category'] == category]
    groups[category] = {
        'x': group_data['x'].tolist(),
        'y': group_data['y'].tolist(),
        'value': group_data['value'].tolist()
    }

# 创建多系列散点图
scatter = Scatter()
scatter.add_xaxis(data['x'].tolist())

# 添加不同系列
colors = ['#5470c6', '#91cc75', '#fac858']
symbols = ['circle', 'rect', 'triangle']

for (category, group_data), color, symbol in zip(groups.items(), colors, symbols):
    scatter.add_yaxis(
        series_name=category,
        y_axis=group_data['y'],
        symbol=symbol,
        symbol_size=10,
        color=color,
        label_opts=opts.LabelOpts(is_show=False)
    )

scatter.set_global_opts(
    title_opts=opts.TitleOpts(title="多系列散点图"),
    xaxis_opts=opts.AxisOpts(name="特征X"),
    yaxis_opts=opts.AxisOpts(name="特征Y"),
    tooltip_opts=opts.TooltipOpts(
        trigger="item",
        formatter="{b}: {c}"
    ),
    legend_opts=opts.LegendOpts(pos_top="10%")
)

scatter.render("multi_scatter.html")

三维散点图

from pyecharts.charts import Scatter3D
from pyecharts import options as opts
import random

# 生成三维数据
data = [
    [random.randint(0, 100) for _ in range(3)] 
    for _ in range(50)
]

scatter3d = (
    Scatter3D()
    .add(
        "",
        data,
        grid3d_opts=opts.Grid3DOpts(width=100, height=100, depth=100),
        label_opts=opts.LabelOpts(is_show=False)
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(title="三维散点图"),
        visualmap_opts=opts.VisualMapOpts(
            max_=100,
            range_color=[
                "#313695", "#4575b4", "#74add1", "#abd9e9", "#e0f3f8",
                "#ffffbf", "#fee090", "#fdae61", "#f46d43", "#d73027", "#a50026"
            ]
        )
    )
)

scatter3d.render("scatter3d.html")

四、三种工具对比与选择建议

对比总结

特性 Matplotlib Seaborn Pyecharts
易用性 较低
美观度 基础 高(默认好看) 高(交互式)
交互性 丰富
输出格式 静态图片 静态图片 HTML/Web
学习曲线 较陡 平缓 中等
数据处理 需要预处理 内置数据处理 需要预处理
适合场景 科学论文、高度定制 数据探索、快速可视化 网页展示、交互报告

选择建议

Matplotlib:适合需要高度定制的科学图表、论文配图 Seaborn:适合数据探索分析、统计可视化、快速生成美观图表 Pyecharts:适合网页应用、交互式报告、动态数据展示

综合示例:同一数据用三种工具

# 生成测试数据
np.random.seed(42)
n = 100
x = np.random.randn(n)
y = x * 2 + np.random.randn(n) * 0.5
categories = np.random.choice(['A', 'B', 'C'], n)
sizes = np.abs(np.random.randn(n)) * 50

# 1. Matplotlib版本
fig, axes = plt.subplots(1, 3, figsize=(15, 4))

# Matplotlib
axes[0].scatter(x, y, c=pd.Categorical(categories).codes, cmap='tab10', s=sizes, alpha=0.7)
axes[0].set_title('Matplotlib')
axes[0].grid(True, alpha=0.3)

# 2. Seaborn版本
df = pd.DataFrame({'x': x, 'y': y, 'category': categories, 'size': sizes})
sns.scatterplot(data=df, x='x', y='y', hue='category', size='size', ax=axes[1])
axes[1].set_title('Seaborn')

# 3. 为Pyecharts准备数据(单独绘制)
print("Pyecharts图表已生成HTML文件")

五、实用技巧

1. 大数据集优化

# Matplotlib大数据优化
plt.scatter(x, y, alpha=0.1, s=1)  # 减小点大小和透明度
plt.hexbin(x, y, gridsize=30, cmap='Blues')  # 使用六边形分箱

# Seaborn大数据优化
sns.kdeplot(x=x, y=y, fill=True, thresh=0, levels=100, cmap="rocket")

2. 添加趋势线

# Matplotlib添加趋势线
z = np.polyfit(x, y, 1)
p = np.poly1d(z)
plt.plot(x, p(x), "r--", alpha=0.8)

3. 颜色映射定制

# 自定义颜色映射
from matplotlib.colors import LinearSegmentedColormap
colors = ["#ff0000", "#ffff00", "#00ff00", "#0000ff"]
cmap = LinearSegmentedColormap.from_list("custom", colors, N=100)

4. 保存高质量图片

# 保存高清图片
plt.savefig('scatter.png', dpi=300, bbox_inches='tight', 
            facecolor='white', edgecolor='none')

根据具体需求选择合适的工具,可以让数据可视化工作更加高效和美观。

相关帖子
2026年的免费老年人体检,在慢性病风险的早期筛查方面有什么新的侧重吗?
2026年的免费老年人体检,在慢性病风险的早期筛查方面有什么新的侧重吗?
公司经营贷额度专项授信,项目贷款额度如何定
公司经营贷额度专项授信,项目贷款额度如何定
同样是单身,
同样是单身,"大龄剩男"和"大龄剩女"为什么在舆论场里受到的待遇完全不一样?
资深从业者总结银行贷款干货,全套知识助力安全高效办理业务
资深从业者总结银行贷款干货,全套知识助力安全高效办理业务
产假期间工资如何计算,用人单位需要承担哪些具体的支付责任?
产假期间工资如何计算,用人单位需要承担哪些具体的支付责任?
商丘市殡葬服务一站式办理%丧葬录像,白事丧事服务
商丘市殡葬服务一站式办理%丧葬录像,白事丧事服务
惠州市殡葬一条龙公司电话%丧葬跟拍录像,丧葬服务一条龙办理
惠州市殡葬一条龙公司电话%丧葬跟拍录像,丧葬服务一条龙办理
济宁市殡葬一条龙服务电话%白事录像,丧葬服务一条龙
济宁市殡葬一条龙服务电话%白事录像,丧葬服务一条龙
蚌埠市殡葬服务公司办理%丧事悼念会服务,办理白事服务
蚌埠市殡葬服务公司办理%丧事悼念会服务,办理白事服务
大同市殡葬摄像服务#正规殡葬公司,收费标准
大同市殡葬摄像服务#正规殡葬公司,收费标准
假离婚躲避过桥垫资债务?虚假离婚法律风险
假离婚躲避过桥垫资债务?虚假离婚法律风险
吉安市葬礼咨询#丧葬服务公司,收费标准,快速上门
吉安市葬礼咨询#丧葬服务公司,收费标准,快速上门
无锡市殡葬服务一站式办理%白事吊唁,丧事服务一条龙
无锡市殡葬服务一站式办理%白事吊唁,丧事服务一条龙
岳阳市殡葬服务车出租%丧事告别会策划,丧葬一条龙
岳阳市殡葬服务车出租%丧事告别会策划,丧葬一条龙
绵阳市白事葬礼#丧葬一条龙服务,正规专业
绵阳市白事葬礼#丧葬一条龙服务,正规专业
在家庭教育中,少数民族家庭的父母如何向孩子传授本民族的传统文化?
在家庭教育中,少数民族家庭的父母如何向孩子传授本民族的传统文化?
湖州市殡葬服务车租赁%丧事悼念会策划,白事一条龙
湖州市殡葬服务车租赁%丧事悼念会策划,白事一条龙
520这天给伴侣发红包,除了常见数字外还有哪些寓意美好的金额?
520这天给伴侣发红包,除了常见数字外还有哪些寓意美好的金额?
新的一年,对于新入职的员工,单位通常从何时开始为其缴存住房公积金?
新的一年,对于新入职的员工,单位通常从何时开始为其缴存住房公积金?
青岛市殡葬乐队#殡葬服务公司一条龙办理,是您的放心选择
青岛市殡葬乐队#殡葬服务公司一条龙办理,是您的放心选择
南宁市正规殡葬公司%殡葬花篮,丧葬服务租车
南宁市正规殡葬公司%殡葬花篮,丧葬服务租车