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

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

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


总结

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


可视化视角-相关

455fb132cfe05919fad7ba8a10e75b48_60ae9bda33ca41edb6590950ebc2bf0d.png


ba3ff8951e6f261734e7a506a25bc499_9b235e5b67b34968a0cf56245efca855.png


代码实现

安装依赖


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()

输出为:

9914a8eba0ff0f835105ac36e28e76ac_44e182c84a944c57becf6f24d1a5b613.png


散点图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()

输出为:

b50512a27b7efebb78c494d20f0b9174_3b3b00bcd54d4f53bb64ab88a02b611a.png


散点图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()

输出为

1b10b7c210e0609b7dcf879fdb6be20f_94832a4295af424c8b329b3cc76e9620.png


散点图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()

输出为:

8ca4844d94004f8f2443e65092d0ba00_b31588fba26b44aeabf19572542c4e17.png


散点图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()

输出为:



20161c252c8a15380222fc3d1c83037d_255556724e75409cbd385bdf4eabd24c.png

d609104ac732ef738838491829effb4e_7566f6b96433445588ef0bb0b52ab9af.png

气泡图

气泡图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()

输出为:

248c42ee992ec3848ac2ffe70c657704_95bccab2ddd84118bc3a0035d578b175.png


气泡图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()

输出为:

1e6f004f90b9a758baacaae0e39400ed_6e4bf8f4da274007ad95db6ba259c0b9.png


相关图

相关图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()


af2f941f33f87ae516ee65b3e1cd629e_9ff3d3d8f1924348967f2aa2b79c14b6.png


相关图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()

68ae40bc0f6740137a90b0e650ee3ab5_0fe21ab7755e4257a13a8f403d39366b.png


相关图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()

fa868910755dd6866b6751ed13dc67b7_9de8b44282a04622b2bb13f072e79884.png


相关图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()

e2d1c1b2c6cd1e4ee1629b2bfffe1ebf_6d85fbbea5fe43fa8e89807d3582d3dc.png


相关图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()

ab597701c6db8f9ae33dec96cf52fe9d_50c27d21bd4444cea238c643cba14a6b.png


相关图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()

02b458f39c085a4e5570a76f4647bd5e_7cefbfb591b346b4bf30f215d0e9d84f.png


热力图

热力图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()

a45398878dbebb163857724609501964_96bc07892b734e2992c07a0768c1c146.png


热力图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()  # 热图

56e49aeb9a39b27e84ed4e0f522ee677_3d1e1e3436194bcd8bc4a44599889972.png


ad7628312e2bf6dbb6f78ac092213adb_649eb99ad65949aca4efbf9aba790873.png


二维密度图

二维密度图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()

faa29b2afbdc347b26a63b1772c946af_03801e2b129a4dee874dafa659b5c8fb.png

二维密度图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()

926a91ea1dff00e1433d17c0db51d4f6_d21d275d5d464433a4395a4863ed5489.png


二维密度图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()

2f59cffaedb24d6cd93565249ea58aa2_1e8ff23dc61a4f909a9fc2b3eb7ef848.png


二维密度图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()

c571f2e77fe0ac623191a8f6c379ee2f_6660b6d2515c4ae2bf2f228d3e950496.png


二维密度图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()


d525431a5a763d7134d0065c608cedab_d72a74a1559140f39fbd08e4502c6e80.png

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