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

一、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年需要了解哪些关于行邮税与跨境电商税的区别?
智能家居设备频繁故障,厂家与销售平台的责任应如何划分
智能家居设备频繁故障,厂家与销售平台的责任应如何划分
商丘市殡葬服务车租赁%殡葬摄像服务,丧葬服务一条龙
商丘市殡葬服务车租赁%殡葬摄像服务,丧葬服务一条龙
荆州市殡葬一条龙服务价格%丧事追悼会策划,丧葬一站式服务
荆州市殡葬一条龙服务价格%丧事追悼会策划,丧葬一站式服务
重庆市白事灵堂策划#丧葬服务公司,全城服务
重庆市白事灵堂策划#丧葬服务公司,全城服务
面对收益波动或瓶颈期,2026年的主播可以采取哪些心态与实操调整?
面对收益波动或瓶颈期,2026年的主播可以采取哪些心态与实操调整?
三明市一条龙殡葬服务%丧礼乐队,丧事一条龙服务
三明市一条龙殡葬服务%丧礼乐队,丧事一条龙服务
乐山市殡葬灵堂布置#殡葬服务正规公司,价格公道
乐山市殡葬灵堂布置#殡葬服务正规公司,价格公道
在非餐时段,外卖骑手是如何安排自己的时间并进行工作与生活的平衡?
在非餐时段,外卖骑手是如何安排自己的时间并进行工作与生活的平衡?
次声波和超声波虽然听不见,但它们如何被我们利用或受到其影响?
次声波和超声波虽然听不见,但它们如何被我们利用或受到其影响?
淮安市丧葬大殓服务#白事服务办理,价格公道
淮安市丧葬大殓服务#白事服务办理,价格公道
公众如何监督并了解所在地区临时救助资金的使用情况与帮扶效果?
公众如何监督并了解所在地区临时救助资金的使用情况与帮扶效果?
临汾市殡葬一条龙价格%丧葬灵堂策划,白事一条龙办理
临汾市殡葬一条龙价格%丧葬灵堂策划,白事一条龙办理
2026年,哪些软技能的价值被进一步凸显,并能间接推动薪资增长?
2026年,哪些软技能的价值被进一步凸显,并能间接推动薪资增长?
如何理解“共济”这个概念?它对减轻家庭医疗负担的实际意义是什么?
如何理解“共济”这个概念?它对减轻家庭医疗负担的实际意义是什么?
在2026年,社区或学校可以组织哪些形式的活动来推广和传播年画文化?
在2026年,社区或学校可以组织哪些形式的活动来推广和传播年画文化?
北京市殡葬一条龙服务电话%丧事告别会,丧事白事一条龙服务
北京市殡葬一条龙服务电话%丧事告别会,丧事白事一条龙服务
家庭安装储水式电热水器如何使用才能更省电并保障使用安全?
家庭安装储水式电热水器如何使用才能更省电并保障使用安全?