数据可视化第二版-03部分-08章-分布
创始人
2025-05-29 06:22:19
0

文章目录

  • 数据可视化第二版-03部分-08章-分布
    • 总结
    • 可视化视角-分布
    • 代码实现
      • 直方图
        • 直方图案例1
        • 直方图示例2
        • 直方图与趋势线
        • 直方图与趋势线2
        • 分组直方图
        • 变形
      • 密度图
        • 密度图1
        • 密度图2-堆积密度图
        • 密度图3-二维密度图
        • 密度图4-边际密度图
        • 密度图5-镜像密度图
        • 密度图6-横向密度图
      • 箱线图
        • 箱线图1
        • 箱线图2-带数据点的盒须图
        • 箱线图3-横向合须图
        • 箱线图4-分组合须图
      • 小提琴图
        • 小提琴图-
        • 小提琴图-学生成绩与性别以及父母婚姻状况的关系
        • 小提琴图-多个小提提琴图
        • 小提琴图-带数据点的小提琴图
        • 小提琴图-横向小提琴图
      • 嵴线图
        • 嵴线图-
        • 嵴线图-
        • 嵴线图-
    • 教材截图

数据可视化第二版-03部分-08章-分布

总结

本系列博客为基于《数据可视化第二版》一书的教学资源博客。本文主要是第8章,分布可视化的案例相关。

可视化视角-分布

在这里插入图片描述

在这里插入图片描述

代码实现

安装依赖

pip install scikit-learn -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install seaborn -i https://pypi.tuna.tsinghua.edu.cn/simple

直方图

直方图依赖

from sklearn import datasets
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from numpy.random import randn
import matplotlib as mpl
import seaborn as sns
from scipy.stats.kde import gaussian_kde
from scipy.stats import norm
from numpy import linspace, hstack
from pylab import plot, show, hist

直方图案例1

# 直方图
df = datasets.load_iris()plt.rcParams['font.sans-serif'] = ['SimHei']  # 添加中文字体
plt.figure(figsize=(10, 8))  # 设置画布大小
plt.hist(df.data[:, 0],  # 选择鸢尾花数据集的第一个特征bins=20,  # 设置分组数量alpha=0.5,  # 颜色透明度color="r",  # 直方图矩形填充颜色edgecolor="black",  # 直方图矩形边框颜色range=(4, 8.5))  # 设置直方图边界
plt.xlabel(df.feature_names[0])  # x标签
plt.ylabel("频数密度")  # y标签
plt.title("鸢尾花数据集特征分布直方图")
plt.show()

在这里插入图片描述

直方图示例2

# 直方图示例
data = np.random.randn(1000)
plt.rcParams['font.sans-serif'] = ['SimHei']  # 添加中文字体
plt.rcParams['axes.unicode_minus'] = False
plt.figure(figsize=(10, 8))  # 设置画布大小
plt.hist(data,bins=15,  # 设置分组数量alpha=0.5,  # 颜色透明度color="blue",  # 直方图矩形填充颜色edgecolor="black")  # 直方图矩形边框颜色
plt.xlabel("")  # x标签
plt.ylabel("频数密度")  # y标签
plt.title("直方图示例")
plt.show()

在这里插入图片描述

直方图与趋势线

# 直方图与趋势线
plt.rcParams['font.sans-serif'] = ['SimHei']  # 添加中文字体
plt.rcParams['axes.unicode_minus'] = Falsesample1 = norm.rvs(loc=-1.0, scale=1, size=320)
sample2 = norm.rvs(loc=2.0, scale=0.6, size=320)
sample = hstack([sample1, sample2])
probDensityFun = gaussian_kde(sample)
x = linspace(-5, 5, 200)
plot(x, probDensityFun(x))
hist(sample, density=True, alpha=0.5, color="purple")
plt.title("直方图与趋势线")
show()

在这里插入图片描述

直方图与趋势线2

# 直方图与趋势线2
data = randn(250)
sns.set_palette("hls")
plt.rcParams['axes.unicode_minus'] = Falsempl.rc("figure", figsize=(10, 6))
sns.displot(data, bins=10, kde=True,rug=True,color='b')
plt.title("直方图与趋势线2")
plt.show()

在这里插入图片描述

分组直方图

import os
os.chdir(os.path.dirname(__file__))
iris = pd.read_csv("鸢尾花.csv")plt.rcParams['font.sans-serif'] = ['SimHei']  # 添加中文字体
plt.figure(figsize=(8, 6))  # 设置画布大小
sns.histplot(data=iris, x="Sepal.Length", hue="Species", alpha=0.5)
plt.title("分组直方图")
plt.xlabel("萼片长度")
plt.show()

在这里插入图片描述

变形

# 变形
# 创建数据集
df = pd.DataFrame({'var1': np.random.normal(size=1000),'var2': np.random.normal(loc=2, size=1000) * -1
})
# 画布大小
plt.rcParams["figure.figsize"] = 10, 6
plt.rcParams['axes.unicode_minus'] = False
# 画变量1的频率分布直方图
sns.histplot(x=df.var1, stat="density", bins=20)
# 画变量2的频率分布直方图
n_bins = 20
# 获得变量2的分组
heights, bins = np.histogram(df.var2, density=True, bins=n_bins)
# 给变量2的高度乘以1
heights *= -1
bin_width = np.diff(bins)[0]
bin_pos = (bins[:-1] + bin_width / 2) * -1
plt.bar(bin_pos, heights, width=bin_width, edgecolor='black')
plt.title("变形")
plt.show()

在这里插入图片描述

密度图

密度图1

# 密度图1
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
import os
os.chdir(os.path.dirname(__file__))iris = pd.read_csv("鸢尾花.csv")
plt.rcParams['font.sans-serif'] = ['SimHei']  # 添加中文字体
plt.figure(figsize=(8, 6))  # 设置画布大小
sns.kdeplot(data=iris, x="Sepal.Length", hue="Species", alpha=0.5, fill="Species")
plt.title("密度图1")
plt.show()

在这里插入图片描述

密度图2-堆积密度图

# 密度图2
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
import os
os.chdir(os.path.dirname(__file__))iris = pd.read_csv("鸢尾花.csv")
plt.rcParams['font.sans-serif'] = ['SimHei']  # 添加中文字体
sns.kdeplot(data=iris.iloc[:, [1, 2, 5]], x="Sepal.Width", hue="Species", common_norm=False, multiple="fill", alpha=1)
plt.title("花萼长度关于花萼宽度的堆积密度图")
plt.xlabel("花萼宽度")
plt.show()

在这里插入图片描述

密度图3-二维密度图

# 密度图3
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
import os
os.chdir(os.path.dirname(__file__))
iris = pd.read_csv("鸢尾花.csv")
plt.rcParams['font.sans-serif'] = ['SimHei']  # 添加中文字体
sns.kdeplot(x=iris.iloc[:, 1], y=iris.iloc[:, 2], cmap="Reds", fill=True, bw_adjust=.5)
plt.xlabel("花萼长度")
plt.ylabel("花萼宽度")
plt.title("密度图3")
plt.show()

在这里插入图片描述

密度图4-边际密度图

# 密度图4
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as snsiris = pd.read_csv("鸢尾花.csv")
plt.rcParams['font.sans-serif'] = ['SimHei']  # 添加中文字体
plt.rcParams['axes.unicode_minus'] = False
sns.jointplot(x=iris["Petal.Length"], y=iris["Petal.Width"], kind='kde', cmap="Reds", fill=True)
plt.title("密度图4")
plt.show()

在这里插入图片描述

密度图5-镜像密度图

# 密度图5import numpy as np
from numpy import linspace
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from scipy.stats import gaussian_kde# 创建数据
df = pd.DataFrame({'var1': np.random.normal(size=1000),'var2': np.random.normal(loc=2, size=1000) * -1
})
plt.rcParams['font.sans-serif'] = ['SimHei']  # 添加中文字体
plt.rcParams['axes.unicode_minus'] = False
# 画变量1的核密度图
sns.kdeplot(data=df, x="var1", fill=True, alpha=1)
# 画变量2的密度图
kde = gaussian_kde(df.var2)
x_range = linspace(min(df.var2), max(df.var2), len(df.var2))
sns.lineplot(x=x_range * -1, y=kde(x_range) * -1, color='orange')
plt.fill_between(x_range * -1, kde(x_range) * -1, color='orange')
plt.xlabel("数值")
plt.axhline(y=0, linestyle='-', linewidth=1, color='black')
plt.title("密度图5")
# show the graph
plt.show()

在这里插入图片描述

密度图6-横向密度图

# 密度图6import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
import warnings
warnings.filterwarnings("ignore")iris = pd.read_csv("鸢尾花.csv")plt.rcParams['font.sans-serif'] = ['SimHei']  # 添加中文字体
plt.figure(figsize=(8, 6))  # 设置画布大小
sns.kdeplot(data=iris, x="Sepal.Length", alpha=0.5, fill="red", vertical=True)
plt.title("密度图6")
plt.show()

在这里插入图片描述

箱线图

箱线图1

# 箱线图1
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import os
os.chdir(os.path.dirname(__file__))iris = pd.read_csv("鸢尾花.csv")
df = iris
plt.rcParams['font.sans-serif'] = ['SimHei']  # 添加中文字体
sns.boxplot(x=df["Species"], y=df["Petal.Width"])
plt.xlabel("种类")
plt.ylabel("花瓣宽度")
plt.title("箱线图1", fontsize=10)
plt.show()

在这里插入图片描述

箱线图2-带数据点的盒须图

# 箱线图2
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import os
os.chdir(os.path.dirname(__file__))iris = pd.read_csv("鸢尾花.csv")
df = iris
plt.rcParams['font.sans-serif'] = ['SimHei']  # 添加中文字体
sns.boxplot(x=df["Species"], y=df["Petal.Width"])
sns.stripplot(x="Species", y="Petal.Width", data=df, jitter=0.6, color="pink")
plt.xlabel("种类")
plt.ylabel("花瓣宽度")
plt.title("带数据点的盒须图", fontsize=10)
plt.show()

在这里插入图片描述

箱线图3-横向合须图

# 箱线图3
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import os
os.chdir(os.path.dirname(__file__))iris = pd.read_csv("鸢尾花.csv")
df = iris
sns.boxplot(y=df["Species"], x=df["Petal.Width"], )
plt.xlabel("种类")
plt.ylabel("花瓣宽度")
plt.title("横向盒须图", fontsize=10)
plt.show()

在这里插入图片描述

箱线图4-分组合须图

# 箱线图4
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import os
os.chdir(os.path.dirname(__file__))plt.rcParams['font.sans-serif'] = ['SimHei']  # 添加中文字体
iris = pd.read_csv("鸢尾花2.csv")
df = iris
sns.boxplot(x=df["属性"], y=df["指标值"], hue=(df["种类"]), )
plt.xlabel("属性")
plt.ylabel("")
plt.title("分组盒须图", fontsize=10)
plt.show()

在这里插入图片描述

小提琴图

小提琴图-

# 小提琴图1
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import os
os.chdir(os.path.dirname(__file__))iris = pd.read_csv("鸢尾花.csv")
df = iris
plt.rcParams['font.sans-serif'] = ['SimHei']  # 添加中文字体
sns.violinplot(x=df["Species"], y=df["Petal.Width"])
plt.xlabel("种类")
plt.ylabel("花瓣宽度")
plt.title("小提琴图", fontsize=10)
plt.show()

在这里插入图片描述

小提琴图-学生成绩与性别以及父母婚姻状况的关系

# 小提琴图2
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import warnings
import os
os.chdir(os.path.dirname(__file__))warnings.filterwarnings("ignore")score = pd.read_csv("student/student-mat.csv", sep=";")
plt.rcParams['font.sans-serif'] = ['SimHei']  # 添加中文字体
df = score
sns.violinplot(y=df["G3"], x=df["Pstatus"], hue=(df["sex"]), split=True)
plt.xlabel("父母婚姻状况")
plt.ylabel("学生分数")
plt.title("学生成绩与性别以及父母婚姻状况的关系", fontsize=10)
plt.show()

在这里插入图片描述

小提琴图-多个小提提琴图

# 小提琴图3
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import os
os.chdir(os.path.dirname(__file__))iris = pd.read_csv("鸢尾花.csv")
df = iris
plt.rcParams['font.sans-serif'] = ['SimHei']  # 添加中文字体
fig = plt.figure(figsize=(14, 14))
fig.suptitle("多个小提琴图")
plt.subplot(2, 2, 1)
sns.violinplot(x=df["Species"], y=df["Petal.Width"], inner="box")
plt.subplot(2, 2, 2)
sns.violinplot(x=df["Species"], y=df["Petal.Width"], inner="point")
plt.subplot(2, 2, 3)
sns.violinplot(x=df["Species"], y=df["Petal.Width"], inner="stick")
plt.subplot(2, 2, 4)
sns.violinplot(x=df["Species"], y=df["Petal.Width"], inner="quartile")plt.show()

在这里插入图片描述

小提琴图-带数据点的小提琴图

# 小提琴图4import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import os
os.chdir(os.path.dirname(__file__))iris = pd.read_csv("鸢尾花.csv")
df = iris
plt.rcParams['font.sans-serif'] = ['SimHei']  # 添加中文字体sns.violinplot(x=df["Species"], y=df["Petal.Width"])
sns.stripplot(x="Species", y="Petal.Width", data=df, jitter=0.2, color="pink")
plt.xlabel("种类")
plt.ylabel("花瓣宽度")
plt.title("带数据点的小提琴图", fontsize=10)
plt.show()

在这里插入图片描述

小提琴图-横向小提琴图

# 小提琴图5
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import os
os.chdir(os.path.dirname(__file__))iris = pd.read_csv("鸢尾花.csv")
df = iris
sns.violinplot(y=df["Species"], x=df["Sepal.Length"], )
plt.xlabel("种类")
plt.ylabel("花瓣宽度")
plt.title("横向小提琴图", fontsize=10)
plt.show()

在这里插入图片描述

嵴线图

嵴线图-

# 脊线图1
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import cm  # 色谱
import joypy
import os
os.chdir(os.path.dirname(__file__))tm1 = pd.read_csv("北京pm2.5数据.csv", sep=",")
plt.rcParams['font.sans-serif'] = ['SimHei']  # 添加中文字体
plt.rcParams['axes.unicode_minus'] = False
tm2 = tm1.iloc[:, [2, 7]]
tm2 = tm2.dropna()
fig, axs = joypy.joyplot(tm2, by="month", fill=True, legend=True, alpha=.8,range_style='own', xlabelsize=22, ylabelsize=22,grid='both', linewidth=.8, linecolor='k', figsize=(8, 6), colormap=(cm.Spectral_r))
plt.title("Ridgeline plot1")
plt.show()

在这里插入图片描述

嵴线图-

# 脊线图2
import pandas as pd
import matplotlib.pyplot as plt
import joypy
import os
os.chdir(os.path.dirname(__file__))tm1 = pd.read_csv("北京pm2.5数据.csv", sep=",")
plt.rcParams['font.sans-serif'] = ['SimHei']  # 添加中文字体
plt.rcParams['axes.unicode_minus'] = False
tm2 = tm1.iloc[:, [2, 7]]
tm2 = tm2.dropna()
fig, axs = joypy.joyplot(tm2, by="month", fill=True, legend=True, alpha=.8, hist=True, bins=40,range_style='own', xlabelsize=22, ylabelsize=22,linewidth=.8, linecolor='k', figsize=(8, 6))
plt.title("Ridgeline plot2")
plt.show()

在这里插入图片描述

嵴线图-

# 脊线图3
import pandas as pd
import matplotlib.pyplot as plt
import joypy
import os
os.chdir(os.path.dirname(__file__))tm1 = pd.read_csv("鸢尾花.csv", sep=",")
plt.rcParams['font.sans-serif'] = ['SimHei']  # 添加中文字体
plt.rcParams['axes.unicode_minus'] = False
tm2 = tm1.dropna()
fig, axs = joypy.joyplot(tm2, by="Species", column="Sepal.Length", fill=True, legend=True, alpha=.8,range_style='own', xlabelsize=22, ylabelsize=22,grid='both', linewidth=.8, linecolor='k', figsize=(8, 6))
plt.title("Ridgeline plot3")
plt.show()

在这里插入图片描述

教材截图

在这里插入图片描述

相关内容

热门资讯

在Spring框架中实现属性配... 如何在不重启应用的前提下,在内存中直接修改配置文件中的属性值? 自定义...
恒生指数早盘跌1.48%,恒生... 5月30日午盘,香港恒生指数下跌1.48%,报23224.40点;恒生科技指数下挫2.55%,报51...
通俗易懂了解Hadoop(更新... 从本书第5、6、7、8章,学习云计算开发相关知识 这是第五章 文章目录Hadoo...
软考-存储系统 存储系统 层次存储结构-分类 1、存储位置 内存&外存 2、存取方式 按内容存取: 相...
福建确定了!2025年继续提高... 继上海、湖北之后,又一省份明确提高养老金,它就是福建。5月28日,福建省政府办公厅发布《福建省提振消...
云南水运现状 数据来源:云南省水路交通“十四五”发展规划: 云南地跨长江、珠江、红河、...
毕业实习FinalShell ... 好久没有写文章了,主要还是技术学习少了,没有什么集中的干货分享给大家。最...
《硬件架构的艺术》读书笔记:C... Chapter 1 亚稳态的世界 一、简介 同步系统中,数据和时钟有固定的因果关系...
Ubuntu 设置 SSH 通... Ubuntu 设置 SSH 通过密钥登录 我们一般使用 VSCode 、MobaXterm、PuT...
WEB安全 PHP基础 WEB安全 PHP基础 PHP简述 PHP(全称:PHP:...
(视觉人机器视觉培训)康耐视3... 1、打开,运行A5000Viewer 2、修改相应参数,确认图像效果,并在Fifo取像工具自定义属...
刚刚,大跳水!发生了什么? 最... 亚太股市集体跳水!今日早盘,亚太市场全线杀跌,昨天大涨的日经指数今早大跌超1.3%,韩国股指亦明显调...
Python数据分析之读取Ex... 曾某年某一天某地 时间如静止的空气 你的不羁 给我惊喜 ——《谁愿放手》陈慧琳 文章目录前言一、P...
嘉应制药信披违规突遭立案,养天... 5月28日晚,广东嘉应制药股份有限公司(以下简称“嘉应制药”)发布公告,公司收到中国证券监督管理委员...
在Win10以及SDK为33的... 文章目录0. 我的操作系统和开发环境1. 相关文件下载:2. import proje...
特朗普面临死局?美国法院出手后... 特朗普的全面关税,被美国法院叫停了。最新消息,美国联邦法院裁定,特朗普在4月2日“解放日”宣布的关税...
C语言函数:判断字符函数,判断... iscntrl:判断是否是控制字符isspace:判断是否是空白字符...这些函数的参数都是一个字符...
医药股午前加速上攻,舒泰神再度... 5月30日,医药股午前加速上攻,舒泰神再度冲击20%涨停,睿智医药封板,科兴制药、华纳药厂、冠昊生物...
国产大飞机强势崛起,有望重塑全... 本文来源:时代周报 作者:迟雨5月28日,中国国产大飞机C919迎来商业运营两周年。截至2025年5...
监管鼓励不良资产转让 上半年消... 在监管机构鼓励不良资产转让的大背景下,今年以来,消费金融行业不良资产转让市场持续升温。截至5月29日...