数据可视化第二版-03部分-11章-相关

简介: 数据可视化第二版-03部分-11章-相关


数据可视化第二版-03部分-11章-相关

总结

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

可视化视角-相关

代码实现

安装依赖

pip install scikit-learn -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install seaborn -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install tushare==1.2.89 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install mplfinance==0.12.9b7 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install pyheatmap==0.1.12  -i https://pypi.tuna.tsinghua.edu.cn/simple

散点图

散点图1-基本散点图
import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets
import seaborn as sns
# 基本散点图
a = np.random.randint(30, size=100)
b = np.random.randint(20, size=100)
asorted = sorted(a)
bsorted = sorted(b)
bsorted2 = sorted(b, reverse=True)
plt.scatter(asorted, bsorted)
plt.scatter(asorted, bsorted2)
plt.show()

输出为:

散点图2-散点折线图
# 散点折线图
x = [2, 4, 6, 9, 12, 15, 18, 21, 24]
y = [12, 17, 10, 32, 15, 24, 5, 20, 16]
plt.scatter(x, y)
plt.plot(x, y)
plt.show()

输出为:

散点图3-回归散点图
# 回归数据散点图
data = datasets.make_regression(n_samples=80,
                                n_features=1,
                                n_targets=1,
                                noise=10,
                                random_state=144)  # 生成回归数据,添加轻微扰动
x = data[0]  # x为50行1列
y = data[1]  # y为1行50列
plt.scatter(x[:, 0], y, s=8)
plt.show()

输出为

散点图4-回归数据散点图
# 回归
data = datasets.make_regression(n_samples=30,
                                n_features=1,
                                n_targets=1,
                                noise=20,
                                random_state=144)  # 生成回归数据,添加轻微扰动
x = data[0]  # x为50行1列
y = data[1]  # y为1行50列
sns.regplot(x=x[:, 0], y=y)  # 添加回归线
plt.show()

输出为:

散点图5-分类数据散点图
# 分类数据散点图
X1, y1 = datasets.make_classification(
    n_samples=300, random_state=1, n_features=2, n_redundant=0, n_informative=2)
plt.scatter(X1[:, 0], X1[:, 1])
plt.show()
moons = datasets.make_moons(n_samples=150, noise=.09, random_state=10)
x = moons[0]
y = moons[1]
plt.scatter(x[:, 0], x[:, 1], c=y)  # 可视化月牙图形
plt.show()

输出为:

气泡图

气泡图1-
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
# 图例1
a = [5, 6, 8, 20, 27, 14, 19, 24, 13, 28, 30, 23, 7, 8, 33, 6, 9, 26, 27, 4]
b = [5, 7, 8, 16, 23, 28, 23, 20, 29, 34, 35, 30, 32, 27, 14, 19, 24, 23, 28, 30]
colors = np.random.rand(len(a))  # 颜色数组
size = [212, 225, 375, 420, 225, 356, 287, 300, 382, 375, 425, 543, 654, 609, 543, 435, 320, 525, 656, 287]
plt.scatter(a, b, s=size, c=colors, alpha=0.6)
plt.show()

输出为:

气泡图2-
sns.set(style="white")
a = [0.1, 0.2, 0.35, 0.5, 0.8, 0.9]
b = [0.4, 0.1, 0.5, 0.9, 0.4, 1]
size = [2500, 2560, 250, 2400, 2500, 750]
plt.scatter(a, b, s=size, c='g', alpha=0.6)
plt.axis([-0.1, 1.1, -0.2, 1.2])
plt.show()

输出为:

相关图

相关图1-
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
from sklearn import datasets
# 相关图图例一
x = datasets.load_iris().data
m = 0
l = x.shape[1]
plt.figure(figsize=(8, 8))
sns.set(style="darkgrid")
# matplotlib画图中文显示会有问题,需要这两行设置默认字体
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
name = ['花萼长度', '花萼宽度', '花瓣长度', '花瓣宽度']
for i in range(l):
    for j in range(l):
        m += 1
        plt.subplot(4, 4, m)
        if i != j:
            plt.scatter(x[:, i], x[:, j], s=3)  # 画出散点图,设置点的大小为3
            plt.grid(True)  # 显示网格
            if j == 0: plt.ylabel(name[i])  # 只在第一列设置纵标签
            if i == 3: plt.xlabel(name[j])  # 只在最后一行设置横标签
        else:
            plt.hist(x[:, i], edgecolor='black')  # 画直方图,使边框为黑色
            plt.grid(True)  # 显示网格
            if i == 0: plt.ylabel(name[i])  # 只在第一列设置纵标签
            if i == 3: plt.xlabel(name[i])  # 只在最后一行设置横标签
plt.show()

相关图2-
# 相关图图例2
x = datasets.load_iris().data
m = 0
l = x.shape[1]
plt.figure(figsize=(8, 8))
sns.set(style="darkgrid")
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# matplotlib画图中文显示会有问题,需要这两行设置默认字体
name = ['花萼长度', '花萼宽度', '花瓣长度', '花瓣宽度']
for i in range(l):
    for j in range(l):
        m += 1
        plt.subplot(4, 4, m)
        if i != j:
            sns.regplot(x=x[:, i], y=x[:, j], marker='.')  # 添加回归线
            if j == 0: plt.ylabel(name[i])  # 只在第一列设置纵标签
            if i == 3: plt.xlabel(name[j])  # 只在最后一行设置横标签
        else:
            plt.hist(x[:, i], edgecolor='black')  # 画直方图,使边框为黑色
            if i == 0: plt.ylabel(name[i])  # 只在第一列设置纵标签
            if i == 3: plt.xlabel(name[i])  # 只在最后一行设置横标签
plt.show()

相关图3-
# 相关图图例3
sns.set(style="ticks", color_codes=True)
sns.set_style('whitegrid', {'font.sans-serif': ['simhei', 'FangSong']})  # 解决中文乱码问题
name = ['花萼长度', '花萼宽度', '花瓣长度', '花瓣宽度']
data = datasets.load_iris()
x = pd.DataFrame(datasets.load_iris().data, columns=name)
sns.pairplot(x)
plt.show()

相关图4-
# 相关图图例4
x = datasets.load_iris().data
y = datasets.load_iris().target
m = 0
l = x.shape[1]
plt.figure(figsize=(8, 8))
sns.set(style="darkgrid")
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# matplotlib画图中文显示会有问题,需要这两行设置默认字体
name = ['花萼长度', '花萼宽度', '花瓣长度', '花瓣宽度']
labels = ['山鸢尾', '变色鸢尾', '维吉尼亚鸢尾']
for i in range(l):
    for j in range(l):
        m += 1
        plt.subplot(4, 4, m)
        if i != j:
            plt.scatter(x[:, i][y == 0], x[:, j][y == 0], s=3)  # 画出散点图,设置点的大小为3
            plt.scatter(x[:, i][y == 1], x[:, j][y == 1], s=3)  # 画出散点图,设置点的大小为3
            plt.scatter(x[:, i][y == 2], x[:, j][y == 2], s=3)  # 画出散点图,设置点的大小为3
            plt.grid(True)  # 显示网格
            if j == 0: plt.ylabel(name[i])  # 只在第一列设置纵标签
            if i == 3: plt.xlabel(name[j])  # 只在最后一行设置横标签
        else:
            sns.kdeplot(data=x[:, i][y == 0], shade=True)
            sns.kdeplot(data=x[:, i][y == 1], shade=True)
            sns.kdeplot(data=x[:, i][y == 2], shade=True)
            if i == 0: plt.ylabel(name[i])  # 只在第一列设置纵标签
            if i == 3: plt.xlabel(name[i])  # 只在最后一行设置横标签
plt.legend(labels, bbox_to_anchor=(1.05, 4.6), loc=2)
plt.show()

相关图5-
# 相关图图例5
data = datasets.load_iris()
x = datasets.load_iris().data
y = datasets.load_iris().target
m = 0
l = x.shape[1]
plt.figure(figsize=(8, 8))
sns.set(style="darkgrid")
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# matplotlib画图中文显示会有问题,需要这两行设置默认字体
name = ['花萼长度', '花萼宽度', '花瓣长度', '花瓣宽度']
# labels=['山鸢尾','变色鸢尾','维吉尼亚鸢尾']
for i in range(l):
    for j in range(l):
        m += 1
        plt.subplot(4, 4, m)
        plt.scatter(x[:, i][y == 0], x[:, j][y == 0], s=3, label='山鸢尾')  # 画出散点图,设置点的大小为3
        plt.scatter(x[:, i][y == 1], x[:, j][y == 1], s=3, label='变色鸢尾')  # 画出散点图,设置点的大小为3
        plt.scatter(x[:, i][y == 2], x[:, j][y == 2], s=3, label='维吉尼亚鸢尾')  # 画出散点图,设置点的大小为3
        plt.grid(True)  # 显示网格
        if j == 0: plt.ylabel(name[i])  # 只在第一列设置纵标签
        if i == 3: plt.xlabel(name[j])  # 只在最后一行设置横标签
plt.legend(bbox_to_anchor=(1.05, 4.6), loc=2)
plt.show()

相关图6-
# 相关图图例6
data = datasets.load_iris()
x = datasets.load_iris().data
y = datasets.load_iris().target
m = 0
l = x.shape[1]
plt.figure(figsize=(8, 8))
sns.set(style="darkgrid")
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# matplotlib画图中文显示会有问题,需要这两行设置默认字体
name = ['花萼长度', '花萼宽度', '花瓣长度', '花瓣宽度']
# labels=['山鸢尾','变色鸢尾','维吉尼亚鸢尾']
for i in range(l):
    for j in range(l):
        m += 1
        plt.subplot(4, 4, m)
        plt.scatter(x[:, i][y == 0], x[:, 3 - j][y == 0], s=3, label='山鸢尾')  # 画出散点图,设置点的大小为3
        plt.scatter(x[:, i][y == 1], x[:, 3 - j][y == 1], s=3, label='变色鸢尾')  # 画出散点图,设置点的大小为3
        plt.scatter(x[:, i][y == 2], x[:, 3 - j][y == 2], s=3, label='维吉尼亚鸢尾')  # 画出散点图,设置点的大小为3
        plt.grid(True)  # 显示网格
        if j == 0:  plt.ylabel(name[i])  # 只在第一列设置纵标签
        if i == 3: plt.xlabel(name[3 - j])  # 只在最后一行设置横标签
plt.legend(bbox_to_anchor=(1.05, 4.6), loc=2)
plt.show()

热力图

热力图1-
from pyheatmap.heatmap import HeatMap
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
plt.figure(figsize=(6, 5))
x = np.random.randn(4, 4)
sns.heatmap(x, annot=True, vmin=-1, vmax=1)
plt.show()

热力图2-
from pyheatmap.heatmap import HeatMap
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
# 1
X = [1, 23, 4, 34, 3, 47, 38, 7, 11, 9, 8, 44, 13, 5, 45, 24] * 10
Y = [26, 5, 35, 24, 18, 7, 28, 49, 6, 23, 54, 28, 8, 21, 52, 42] * 10
data = []
for i in range(len(X)):
    tmp = [int(X[i]), int(Y[i]), 1]
    data.append(tmp)
heat = HeatMap(data)
heat.clickmap().show()  # 点击图
heat.heatmap().show()  # 热图

二维密度图

二维密度图1-
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn import datasets
import warnings
warnings.filterwarnings("ignore")
# 图例1
x = datasets.load_iris().data
y = datasets.load_iris().target
sns.kdeplot(x=x[:, 0], y=x[:, 3], cmap='Purples',
            shade=True, shade_lowest=False)
plt.show()

二维密度图2-
# 图例2
cov = [[0.2, 1], [0.5, 0.1]]
mean = [0.4, 0.7]
np.random.seed(123)
y = np.random.multivariate_normal(mean, cov, 100)
sns.kdeplot(x=y[:, 0], y=y[:, 1], shade=True, cmap="Blues", cbar=True)
plt.show()

二维密度图3-
# 图例3
np.random.seed(123)
x = np.random.randn(100)
y = np.random.binomial(50, 0.5, size=100)
sns.set(style="white", font_scale=1.5)
ax = sns.jointplot(x=x, y=y, kind='kde', cmap="Blues")
plt.show()

二维密度图4-
# 图例4
mean, cov = [0, 1], [(1, .5), (.5, 1)]
data = np.random.multivariate_normal(mean, cov, 200)
df = pd.DataFrame(data, columns=["x", "y"])
f, ax = plt.subplots(figsize=(6, 6))
cmap = sns.cubehelix_palette(as_cmap=True, dark=0, light=1, reverse=True)
sns.kdeplot(x=df.x, y=df.y, cmap=cmap, n_levels=60, shade=True)
plt.show()

二维密度图5-
# 图例5
np.random.seed(123)
x = np.random.randn(100)
y = np.random.binomial(50, 0.5, size=100)
sns.set(style="white", font_scale=1.5)
ax = sns.jointplot(x=x, y=y, kind='hex', cmap="Blues")
plt.show()

教材截图

相关文章
|
5月前
|
数据可视化
数据可视化第二版-03部分-11章-相关
数据可视化第二版-03部分-11章-相关
|
23天前
|
数据可视化 前端开发 JavaScript
【数据可视化】—大屏数据可视化展示
【数据可视化】—大屏数据可视化展示
|
8月前
|
人工智能 数据可视化 BI
数据可视化(一)
数据可视化(一)
95 0
|
8月前
|
编解码 监控 数据可视化
数据可视化(二)
数据可视化(二)
352 0
|
监控 数据可视化 前端开发
数据可视化(一):介绍
数据可视化(一):介绍
数据可视化(一):介绍
|
数据可视化 大数据 数据挖掘
数据可视化介绍|学习笔记
快速学习数据可视化介绍
107 0
数据可视化介绍|学习笔记
|
数据可视化
ggpubr|让数据可视化更加优雅(上)
ggpubr是由Alboukadel Kassambara创建的,基于ggplot2的可视化包。主要用于绘制符合出版要求的图形。
207 0
ggpubr|让数据可视化更加优雅(上)
|
数据可视化
ggpubr|让数据可视化更加优雅(下)
ggpubr|让数据可视化更加优雅(下)
311 0
ggpubr|让数据可视化更加优雅(下)
|
数据可视化 数据挖掘 C++
从0到1,掌握数据可视化的基本技巧
大家好,我是爱学习的小熊妹。做运营的小哥哥小姐姐们,经常要做各种汇报ppt。其中怎么画图表,经常是很纠结的一件事。小熊妹也不是专业科班出身的数据分析师,但还是认真的总结了数据可视化的基本技巧。
180 0
从0到1,掌握数据可视化的基本技巧
|
数据可视化
数据可视化 30 个小技巧(二)
优秀的数据可视化图表只是罗列、总结数据吗?当然不是!数据可视化其真正的价值是设计出可以被读者轻松理解的数据展示,因此在设计过程中,每一个选择,最终都应落脚于读者的体验,而非图表制作者个人。 这里给大家总结了数据可视化的制作的30个小技巧,通过列举一些容易被忽略的常见错误,最终能够快速提升和巩固你的可视化制作水平。
数据可视化 30 个小技巧(二)