[数学建模从入门到入土] seaborn例图

[数学建模从入门到入土] seaborn例图

个人导航

知乎:https://www.zhihu.com/people/byzh_rc

CSDN:https://blog.csdn.net/qq_54636039

注:本文仅对所述内容做了框架性引导,具体细节可查询其余相关资料or源码

参考文章:https://seaborn.pydata.org/examples/index.html

文章目录

  • [[数学建模从入门到入土] seaborn例图](#[数学建模从入门到入土] seaborn例图)
  • 个人导航
  • [散点图 scatterplot](#散点图 scatterplot)
  • [线性图 lineplot](#线性图 lineplot)
  • [条形图 barplot](#条形图 barplot)
  • [直方图 histplot](#直方图 histplot)
  • [核密度估计图 kdeplot](#核密度估计图 kdeplot)
  • [分布图 displot](#分布图 displot)
  • [箱线图 boxplot](#箱线图 boxplot)
  • [小提琴图 violinplot](#小提琴图 violinplot)
  • [热力图 heatmap](#热力图 heatmap)
  • [关系图 relplot](#关系图 relplot)
  • [分类图 catplot](#分类图 catplot)
  • [成对关系图 pairplot](#成对关系图 pairplot)

散点图 scatterplot

适用于显示数据点之间的关系,尤其是两个连续变量之间的关系

py 复制代码
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme(style="whitegrid")

# 钻石数据集
diamonds = sns.load_dataset("diamonds")

# 制散点图,同时将点颜色和大小映射到数据集中的不同变量
f, ax = plt.subplots(figsize=(6.5, 6.5))
sns.despine(f, left=True, bottom=True)
clarity_ranking = ["I1", "SI2", "SI1", "VS2", "VS1", "VVS2", "VVS1", "IF"]
sns.scatterplot(x="carat", y="price",
                hue="clarity", size="depth",
                palette="ch:r=-.2,d=.3_r",
                hue_order=clarity_ranking,
                sizes=(1, 8), linewidth=0,
                data=diamonds, ax=ax)
plt.show()

线性图 lineplot

显示变量随时间或顺序变化的趋势

py 复制代码
import seaborn as sns
from matplotlib import pyplot as plt

sns.set_theme(style="darkgrid")

# 加载一个包含长格式数据的示例数据集
fmri = sns.load_dataset("fmri")

# 绘制不同事件和区域的响应信号
sns.lineplot(x="timepoint", y="signal",
             hue="region", style="event",
             data=fmri)
plt.show()

条形图 barplot

显示分类数据的数量或大小比较,能够直观显示各类别的相对比例

py 复制代码
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme(style="white", context="talk")
rs = np.random.RandomState(8)

# 设置 matplotlib 图形
f, (ax1, ax2, ax3) = plt.subplots(3, 1, figsize=(7, 5), sharex=True)

# 生成一些有序数据
x = np.array(list("ABCDEFGHIJ"))
y1 = np.arange(1, 11)
sns.barplot(x=x, y=y1, hue=x, palette="rocket", ax=ax1)
ax1.axhline(0, color="k", clip_on=False)
ax1.set_ylabel("Sequential")

# 将数据中心化以使其成为发散数据
y2 = y1 - 5.5
sns.barplot(x=x, y=y2, hue=x, palette="vlag", ax=ax2)
ax2.axhline(0, color="k", clip_on=False)
ax2.set_ylabel("Diverging")

# 随机重新排列数据以使其成为定性数据
y3 = rs.choice(y1, len(y1), replace=False)
sns.barplot(x=x, y=y3, hue=x, palette="deep", ax=ax3)
sns.barplot(x=x, y=y3, hue=x, palette="deep", ax=ax3)
ax3.axhline(0, color="k", clip_on=False)
ax3.set_ylabel("Qualitative")

# 完成图形绘制
sns.despine(bottom=True)
plt.setp(f.axes, yticks=[])
plt.tight_layout(h_pad=2)

plt.show()

直方图 histplot

用于显示连续数据的分布情况。

能够直观展示数据的频率分布,适合用于探索数据的整体分布或检验数据是否符合某种分布。

py 复制代码
import seaborn as sns
import matplotlib as mpl
import matplotlib.pyplot as plt

sns.set_theme(style="ticks")

diamonds = sns.load_dataset("diamonds")

f, ax = plt.subplots(figsize=(7, 5))
sns.despine(f)

sns.histplot(
    diamonds,
    x="price", hue="cut",
    multiple="stack",
    palette="light:m_r",
    edgecolor=".3",
    linewidth=.5,
    log_scale=True,
)
ax.xaxis.set_major_formatter(mpl.ticker.ScalarFormatter())
ax.set_xticks([500, 1000, 2000, 5000, 10000])

plt.show()

核密度估计图 kdeplot

用于估计连续数据的概率密度。相对于直方图,它更平滑,适合于分析数据的分布模式。

py 复制代码
import matplotlib.pyplot as plt
import seaborn as sns

sns.set_theme(style="darkgrid")
iris = sns.load_dataset("iris")

# 设置图形
f, ax = plt.subplots(figsize=(8, 8))
ax.set_aspect("equal")

# 绘制等高线图以表示每个二元密度
sns.kdeplot(
    data=iris.query("species != 'versicolor'"),  # 筛选除 versicolor 以外的数据
    x="sepal_width",
    y="sepal_length",
    hue="species",
    thresh=.1,
)

plt.tight_layout()
plt.show()

分布图 displot

适合用于展示一个变量的分布,并支持多种形式的分布(如直方图、核密度估计、ECDF等)。

适用于分层数据的比较。

py 复制代码
import matplotlib.pyplot as plt
import seaborn as sns

sns.set_theme(style="darkgrid")
df = sns.load_dataset("penguins")
sns.displot(
    df, x="flipper_length_mm", col="species", row="sex",
    binwidth=3, height=3, facet_kws=dict(margin_titles=True),
)

plt.show()
py 复制代码
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_theme(style="ticks")
mpg = sns.load_dataset("mpg")

colors = (250, 70, 50), (350, 70, 50)
cmap = sns.blend_palette(colors, input="husl", as_cmap=True)
sns.displot(
    mpg,
    x="displacement", col="origin", hue="model_year",
    kind="ecdf", aspect=.75, linewidth=2, palette=cmap,
)

plt.show()

箱线图 boxplot

用于展示数据的分布和离群值。

通过显示数据的四分位数(Q1、Q2、Q3)、极值和中位数等信息,能够很清晰地表达数据的集中趋势和变异性。

py 复制代码
import seaborn as sns
import matplotlib.pyplot as plt

sns.set_theme(style="ticks")

# 初始化图形,并设置 x 轴为对数刻度
f, ax = plt.subplots(figsize=(7, 6))
ax.set_xscale("log")

# 加载示例行星数据集
planets = sns.load_dataset("planets")

# 使用水平箱线图绘制轨道周期
sns.boxplot(
    planets, x="distance", y="method", hue="method",
    whis=[0, 100], width=.6, palette="vlag"
)

# 添加散点以显示每个观测值
sns.stripplot(planets, x="distance", y="method", size=4, color=".3")

# 调整视觉呈现效果
ax.xaxis.grid(True)  # 显示 x 轴网格线
ax.set(ylabel="")     # 隐藏 y 轴标签
sns.despine(trim=True, left=True)  # 移除左侧边框,并修剪坐标轴范围

plt.tight_layout()
plt.show()

小提琴图 violinplot

比箱线图更加详细,能够显示数据的密度分布。适用于对比多个类别之间的数据分布情况。

py 复制代码
import matplotlib.pyplot as plt

import seaborn as sns
sns.set_theme(style="dark")

# 加载示例小费数据集
tips = sns.load_dataset("tips")

# 绘制嵌套的小提琴图,并拆分小提琴以便于比较
sns.violinplot(data=tips, x="day", y="total_bill", hue="smoker",
               split=True, inner="quart", fill=False,
               palette={"Yes": "g", "No": ".35"})

plt.show()

热力图 heatmap

用于展示变量之间的相关性。

py 复制代码
from string import ascii_letters
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

sns.set_theme(style="white")

# 生成一个大型随机数据集
rs = np.random.RandomState(33)
d = pd.DataFrame(data=rs.normal(size=(100, 26)),
                 columns=list(ascii_letters[26:]))

# 计算相关系数矩阵
corr = d.corr()

# 生成一个用于遮蔽上三角的掩码
mask = np.triu(np.ones_like(corr, dtype=bool))

# 设置 matplotlib 图形
f, ax = plt.subplots(figsize=(11, 9))

# 生成自定义的离散化颜色映射
cmap = sns.diverging_palette(230, 20, as_cmap=True)

# 使用掩码和正确的纵横比绘制热力图
sns.heatmap(corr, mask=mask, cmap=cmap, vmax=.3, center=0,
            square=True, linewidths=.5, cbar_kws={"shrink": .5})

plt.tight_layout()
plt.show()

关系图 relplot

用于展示数据中两个或多个变量之间的关系。适合分析多个维度之间的相互关系。

py 复制代码
import matplotlib.pyplot as plt

import seaborn as sns
sns.set_theme(style="whitegrid")

# 加载大脑网络数据集,选择子集,并展平多级索引
df = sns.load_dataset("brain_networks", header=[0, 1, 2], index_col=0)

# 定义要使用的网络编号列表
used_networks = [1, 5, 6, 7, 8, 12, 13, 17]
# 筛选出属于指定网络的列数据
used_columns = (df.columns
                  .get_level_values("network")
                  .astype(int)
                  .isin(used_networks))
df = df.loc[:, used_columns]

# 将多级列名合并为单级(用"-"连接)
df.columns = df.columns.map("-".join)

# 计算相关系数矩阵并将其转换为长格式
corr_mat = df.corr().stack().reset_index(name="correlation")

# 将每个单元格绘制为具有不同大小和颜色的散点
g = sns.relplot(
    data=corr_mat,
    x="level_0", y="level_1", hue="correlation", size="correlation",
    palette="vlag", hue_norm=(-1, 1), edgecolor=".7",
    height=10, sizes=(50, 250), size_norm=(-.2, .8),
)

# 调整图形以完成最终效果
g.set(xlabel="", ylabel="", aspect="equal")  # 设置空标签和等比例坐标轴
g.despine(left=True, bottom=True)  # 移除左侧和底部边框
g.ax.margins(.02)  # 设置边距
for label in g.ax.get_xticklabels():
    label.set_rotation(90)  # 将 x 轴标签旋转90度

plt.show()

分类图 catplot

用于展示分类变量的分布和比较,适用于类别数据的可视化。

py 复制代码
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_theme(style="whitegrid")

penguins = sns.load_dataset("penguins")

g = sns.catplot(
    data=penguins, kind="bar",
    x="species", y="body_mass_g", hue="sex",
    errorbar="sd", palette="dark", alpha=.6, height=6
)
g.despine(left=True)
g.set_axis_labels("", "Body mass (g)")
g.legend.set_title("")

plt.show()

成对关系图 pairplot

用于展示数据集中各个变量之间的成对关系。适合用于多变量数据的可视化,能够同时查看多个变量间的关系。

py 复制代码
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_theme(style="ticks")

df = sns.load_dataset("penguins")
sns.pairplot(df, hue="species")

plt.show()
相关推荐
田里的水稻21 小时前
FA_拟合和插值(FI)-逼近样条03(准均匀B样条的计算)
人工智能·数学建模·机器人·自动驾驶
holeer1 天前
CS.Math 之《离散数学》| 知识点笔记
数据结构·数据库·数学建模·操作系统·抽象代数·计算机组成
极客数模2 天前
【2026美赛赛题初步翻译F题】2026_ICM_Problem_F
大数据·c语言·python·数学建模·matlab
热心网友俣先生2 天前
2026年美赛ABC DEF各赛题评分细则发布+细则解读
数学建模
田里的水稻2 天前
FA_拟合和插值(FI,fitting_and_interpolation)-逼近样条02(多阶贝塞尔曲线)
数学建模·自动驾驶·几何学
田里的水稻2 天前
FA_拟合和插值(FI,fitting_and_interpolation)-逼近样条01(贝塞尔、B样条和NURBS曲线)
数学建模·几何学
嵌入式冰箱3 天前
2026年数学建模美赛C题
数学建模
小文数模4 天前
2026年美赛数学建模C题完整参考论文(含模型和代码)
python·数学建模·matlab
DS数模4 天前
2026年美赛MCM A题保姆级教程思路分析|A题:智能手机电池消耗建模
数学建模·智能手机·美国大学生数学建模竞赛·美国大学生数学建模·2026美赛·2026美赛a题