Python图表分布数据可视化:Seaborn

conda  install seaborn  是安装到jupyter那个环境的

1. 整体风格设置

对图表整体颜色、比例等进行风格设置,包括颜色色板等
调用系统风格进行数据可视化

set() / set_style() / axes_style() / despine() / set_context()

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
% matplotlib inline
#创建正弦函数及图表
def sinplot(flip = 1):
    x = np.linspace(0, 14, 100)
    for i in range(1, 7):
        plt.plot(x, np.sin(x + i * 5) * (7 - i) * flip)
sinplot()
    

1.1 set()

sns.set() #设置风格之后就会固定住,唯一办法就是刷新重新设置下
sinplot()
plt.grid(linestyle = ‘--‘)

1.2 set_style()

# 2、set_style()
# 切换seaborn图表风格
# 风格选择包括:"white", "dark", "whitegrid", "darkgrid", "ticks"

fig = plt.figure(figsize=(6,6))

ax1 = fig.add_subplot(2,1,1)
sns.set_style("whitegrid")
data = np.random.normal(size=(20, 6)) + np.arange(6) / 2
sns.boxplot(data=data)
plt.title(‘style - whitegrid‘)
# 仍然可以使用matplotlib的参数

ax2 = fig.add_subplot(2,1,2)
#sns.set_style("dark")
sinplot()
# 子图显示

1.3 despine()

# 3、despine()
# 设置图表坐标轴
# seaborn.despine(fig=None, ax=None, top=True, right=True, left=False,
# bottom=False, offset=None, trim=False)

sns.set_style("ticks")
# 设置风格

fig = plt.figure(figsize=(6,9))
plt.subplots_adjust(hspace=0.3)
# 创建图表

ax1 = fig.add_subplot(3,1,1)
sinplot()
sns.despine()
# 删除了上、右坐标轴

ax2 = fig.add_subplot(3,1,2)
sns.violinplot(data=data) #小提琴图
# sns.despine(offset=10, trim=True)  #offset坐标轴会偏移10; trim=False是坐标轴没有限制
# offset:与坐标轴之间的偏移
# trim:为True时,将坐标轴限制在数据最大最小值

ax3 = fig.add_subplot(3,1,3)
sns.boxplot(data=data, palette="deep")
sns.despine(left=True, right = False) #left=True是左边不显示;right=False是显示
# top, right, left, bottom:布尔型,为True时不显示

1.4 axes_style()

# 4、axes_style()
# 设置局部图表风格,可学习和with配合的用法

with sns.axes_style("darkgrid"):
    plt.subplot(211)
    sinplot()
# 设置局部图表风格,用with做代码块区分

sns.set_style("whitegrid")
plt.subplot(212)
sinplot()
# 外部表格风格

1.5 set_context()

# 5、set_context()
# 设置显示比例尺度
# 选择包括:‘paper‘, ‘notebook‘, ‘talk‘, ‘poster‘

sns.set_context("paper")
sinplot()
# 默认为notebook

2. 调色盘

# 对图表整体颜色、比例等进行风格设置,包括颜色色板等
# 调用系统风格进行数据可视化

# color_palette()

2.1 color_palette()

# 1、color_palette()
# 默认6种颜色:deep, muted, pastel, bright, dark, colorblind
# seaborn.color_palette(palette=None, n_colors=None, desat=None)
current_palette = sns.color_palette()
sns.palplot(current_palette)

# 一、其他颜色风格
# 风格内容:Accent, Accent_r, Blues, Blues_r, BrBG, BrBG_r, BuGn, BuGn_r, BuPu,
# BuPu_r, CMRmap, CMRmap_r, Dark2, Dark2_r, GnBu, GnBu_r, Greens, Greens_r, Greys, Greys_r, OrRd, OrRd_r, Oranges, Oranges_r, PRGn, PRGn_r,
# Paired, Paired_r, Pastel1, Pastel1_r, Pastel2, Pastel2_r, PiYG, PiYG_r, PuBu, PuBuGn, PuBuGn_r, PuBu_r, PuOr, PuOr_r, PuRd, PuRd_r, Purples,
# Purples_r, RdBu, RdBu_r, RdGy, RdGy_r, RdPu, RdPu_r, RdYlBu, RdYlBu_r, RdYlGn, RdYlGn_r, Reds, Reds_r, Set1, Set1_r, Set2, Set2_r, Set3,
# Set3_r, Spectral, Spectral_r, Wistia, Wistia_r, YlGn, YlGnBu, YlGnBu_r, YlGn_r, YlOrBr, YlOrBr_r, YlOrRd, YlOrRd_r, afmhot, afmhot_r,
# autumn, autumn_r, binary, binary_r, bone, bone_r, brg, brg_r, bwr, bwr_r, cool, cool_r, coolwarm, coolwarm_r, copper, copper_r, cubehelix,
# cubehelix_r, flag, flag_r, gist_earth, gist_earth_r, gist_gray, gist_gray_r, gist_heat, gist_heat_r, gist_ncar, gist_ncar_r, gist_rainbow,
# gist_rainbow_r, gist_stern, gist_stern_r, gist_yarg, gist_yarg_r, gnuplot, gnuplot2, gnuplot2_r, gnuplot_r, gray, gray_r, hot, hot_r, hsv,
# hsv_r, icefire, icefire_r, inferno, inferno_r, jet, jet_r, magma, magma_r, mako, mako_r, nipy_spectral, nipy_spectral_r, ocean, ocean_r,
# pink, pink_r, plasma, plasma_r, prism, prism_r, rainbow, rainbow_r, rocket, rocket_r, seismic, seismic_r, spectral, spectral_r, spring,
# spring_r, summer, summer_r, terrain, terrain_r, viridis, viridis_r, vlag, vlag_r, winter, winter_r
sns.palplot(sns.color_palette("inferno_r", 8))
# 这里颜色风格为 hls
# 颜色色块个数为8个
# 风格颜色反转(不是所有颜色都可以反转):Blues/Blues_r

#分组颜色设置 - “Paired”
sns.palplot(sns.color_palette("Paired", 10)) #color_palette默认颜色

2.2 亮度、饱和度

# 2、设置亮度,饱和度
# 可用方法:
# ① husl_palette([n_colors, h, s, l])
# ② hls_palette([n_colors, h, l, s])
sns.palplot(sns.hls_palette(8, l=.3, s=.9)) #l--> 亮度;s--> 饱和度

2.3 cubehelix_palette()

# 3、cubehelix_palette()
# 按照线性增长计算,设置颜色

sns.palplot(sns.cubehelix_palette(8, gamma=2)) #gamma值越大越暗
sns.palplot(sns.cubehelix_palette(8, start=.5, rot=-.75)) #8个色带,从1.2颜色开始算,rot是旋转角度;start、rot起始终止颜色
sns.palplot(sns.cubehelix_palette(8, start=2, rot=0, dark=0, light=.95, reverse=True))
# n_colors → 颜色个数
# start → 值区间在0-3,开始颜色
# rot → 颜色旋转角度
# gamma → 颜色伽马值,越大颜色越暗
# dark,light → 值区间0-1,颜色深浅
# reverse → 布尔值,默认为False,由浅到深

2.4 dark_palette()

 #4、dark_palette(color[, n_colors, reverse, ...]) / light_palette(color[, n_colors, reverse, ...])
# 颜色深浅

sns.palplot(sns.light_palette("green"))   # 按照green做浅色调色盘
#sns.palplot(sns.color_palette("Greens"))  # cmap为Greens风格

sns.palplot(sns.dark_palette("red", reverse=True))   # 按照blue做深色调色盘
# reverse → 转制颜色

2.5 diverging_palette()

# 5、diverging_palette()
# 创建分散颜色
# seaborn.diverging_palette(h_neg, h_pos, s=75, l=50, sep=10, n=6,
# center=‘light‘, as_cmap=False)¶

sns.palplot(sns.diverging_palette(145, 280, s=85, l=25, n=7)) #第一个起始值和末尾颜色值,s和l是饱和度、亮度,n个数
# h_neg, h_pos → 起始/终止颜色值
# s → 值区间0-100,饱和度
# l → 值区间0-100,亮度
# n → 颜色个数
# center → 中心颜色为浅色还是深色“light”,“dark”,默认为light

# 5、diverging_palette()
# 创建分散颜色

plt.figure(figsize = (8,6))
x = np.arange(25).reshape(5, 5) #二维的组
cmap = sns.diverging_palette(200, 20, sep=20, as_cmap=True) #调色盘
sns.heatmap(x, cmap=cmap)#创建热力图它就显示成热力图的效果了

# 设置调色板后,绘图创建图表 

sns.set_style("whitegrid")
# 设置风格

with sns.color_palette("PuBuGn_d"): #设置调色盘
    plt.subplot(211)
    sinplot()

sns.set_palette("husl") #或者这样
plt.subplot(212)
sinplot()
# 绘制系列颜色

3. 分布数据可视化 - 直方图与密度图

distplot() / kdeplot() / rugplot()

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
% matplotlib inline

sns.set_style("darkgrid")
sns.set_context("paper")
# 设置风格、尺度

import warnings
warnings.filterwarnings(‘ignore‘)
# 不发出警告
rs = np.random.RandomState(10)  # 设定随机数种子
s = pd.Series(rs.randn(100) * 100)
sns.distplot(s,bins = 10,hist = True,kde = False,norm_hist=False,
            rug = True,vertical = False,
            color = ‘y‘,label = ‘distplot‘,axlabel = ‘x‘)
plt.legend()
# bins → 箱数
# hist、ked → 是否显示箱数/显示密度曲线
# norm_hist → 直方图是否按照密度来显示
# rug → 是否显示数据分布情况
# vertical → 是否水平显示
# color → 设置颜色
# label → 图例
# axlabel → x轴标注

# 1、直方图 - distplot()
# 颜色详细设置

sns.distplot(s,rug = True,
            rug_kws = {‘color‘:‘g‘} ,
            # 设置数据频率分布颜色
            kde_kws={"color": "k", "lw": 1, "label": "KDE",‘linestyle‘:‘--‘},
            # 设置密度曲线颜色,线宽,标注、线形
            hist_kws={"histtype": "step", "linewidth": 1,"alpha": 1, "color": "g"})
            # 设置箱子的风格、线宽、透明度、颜色
            # 风格包括:‘bar‘, ‘barstacked‘, ‘step‘, ‘stepfilled‘

# 2、密度图 - kdeplot()
# 单个样本数据密度分布图

sns.kdeplot(s,
           shade = False,  # 是否填充
           color = ‘r‘,   # 设置颜色
           vertical = False  # 设置是否水平
           )

sns.kdeplot(s,bw=5, label="bw: 0.2",
            linestyle = ‘-‘,linewidth = 1.2,alpha = 0.5)
sns.kdeplot(s,bw=20, label="bw: 2",
            linestyle = ‘-‘,linewidth = 1.2,alpha = 0.5)
# bw → 控制拟合的程度,类似直方图的箱数,设置的数量越大越平滑,越小越容易过度拟合

sns.rugplot(s,height = 0.1,color = ‘k‘,alpha = 0.5)
# 数据频率分布图

# 2、密度图 - kdeplot()
# 两个样本数据密度分布图

rs = np.random.RandomState(2)  # 设定随机数种子
df = pd.DataFrame(rs.randn(100,2),
                 columns = [‘A‘,‘B‘])
sns.kdeplot(df[‘A‘],df[‘B‘], #两个样本的数据密度图
           cbar = True,    # 是否显示颜色图例
           shade = True,   # 是否填充
           cmap = ‘Reds‘,  # 设置调色盘
           shade_lowest=False,  # 最外围颜色是否显示
           n_levels = 10   # 曲线个数(如果非常多,则会越平滑)
           )
# 两个维度数据生成曲线密度图,以颜色作为密度衰减显示
plt.grid(linestyle = ‘--‘)
plt.scatter(df[‘A‘], df[‘B‘], s=5, alpha = 0.5, color = ‘k‘) #散点

sns.rugplot(df[‘A‘], color="g", axis=‘x‘,alpha = 0.5)
sns.rugplot(df[‘B‘], color="r", axis=‘y‘,alpha = 0.5)
# 注意设置x,y轴

# 2、密度图 - kdeplot()
# 两个样本数据密度分布图
# 多个密度图

rs1 = np.random.RandomState(2)
rs2 = np.random.RandomState(5)
df1 = pd.DataFrame(rs1.randn(100,2)+2,columns = [‘A‘,‘B‘])
df2 = pd.DataFrame(rs2.randn(100,2)-2,columns = [‘A‘,‘B‘])
# 创建数据

sns.kdeplot(df1[‘A‘],df1[‘B‘],cmap = ‘Greens‘,
            shade = True,shade_lowest=False)
sns.kdeplot(df2[‘A‘],df2[‘B‘],cmap = ‘Blues‘,
            shade = True,shade_lowest=False)
# 创建图表

4. 分布数据可视化 - 散点图

分布数据可视化 - 散点图

jointplot() / pairplot()

综合和矩阵散点图

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
% matplotlib inline

sns.set_style("whitegrid")
sns.set_context("paper")
# 设置风格、尺度

import warnings
warnings.filterwarnings(‘ignore‘)
# 不发出警告
# 1、综合散点图 - jointplot()
# 散点图 + 分布图

rs = np.random.RandomState(2)
df = pd.DataFrame(rs.randn(200,2),columns = [‘A‘,‘B‘])
# 创建数据

sns.jointplot(x=df[‘A‘], y=df[‘B‘],  # 设置xy轴,显示columns名称
              data=df,   # 设置数据
              color = ‘k‘,   # 设置颜色
              s = 50, edgecolor="w",linewidth=1,  # 设置散点大小、边缘线颜色及宽度(只针对scatter)
              kind = ‘scatter‘,   # 设置类型:“scatter”、“reg”、“resid”、“kde”、“hex”
              space = 0.2,  # 设置散点图和布局图的间距
              size = 5,   # 图表大小(自动调整为正方形)
              ratio = 4,  # 散点图与布局图高度比,整型
              marginal_kws=dict(bins=15, rug=True)  # 设置柱状图箱数,是否设置rug
              )  

# 1、综合散点图 - jointplot()
# 散点图 + 分布图
# 六边形图

df = pd.DataFrame(rs.randn(500,2),columns = [‘A‘,‘B‘])
# 创建数据

with sns.axes_style("white"):
    sns.jointplot(x=df[‘A‘], y=df[‘B‘],data = df, kind="hex", color="k",
                 marginal_kws=dict(bins=20))

# 1、综合散点图 - jointplot()
# 散点图 + 分布图
# 密度图

rs = np.random.RandomState(15)
df = pd.DataFrame(rs.randn(300,2),columns = [‘A‘,‘B‘])
# 创建数据

g = sns.jointplot(x=df[‘A‘], y=df[‘B‘],data = df,
                  kind="kde", color="k",
                  shade_lowest=False) #是否对外围做面积的覆盖
# 创建密度图

g.plot_joint(plt.scatter,c="w", s=30, linewidth=1, marker="+")
# 添加散点图

# 1、综合散点图 - JointGrid()
# 可拆分绘制的散点图
# plot_joint() + ax_marg_x.hist() + ax_marg_y.hist()

sns.set_style("white")
# 设置风格

tips = sns.load_dataset("tips")
print(tips.head())
# 导入数据

g = sns.JointGrid(x="total_bill", y="tip", data=tips)
# 创建一个绘图表格区域,设置好x、y对应数据

g.plot_joint(plt.scatter, color =‘m‘, edgecolor = ‘white‘)  # 设置框内图表,scatter,首先设置个内部的点图
g.ax_marg_x.hist(tips["total_bill"], color="b", alpha=.6,
                 bins=np.arange(0, 60, 3))            # 设置x轴直方图,注意bins是数组
g.ax_marg_y.hist(tips["tip"], color="r", alpha=.6,
                 orientation="horizontal",
                 bins=np.arange(0, 12, 1))            # 设置x轴直方图,注意需要orientation参数

from scipy import stats
g.annotate(stats.pearsonr)
# 设置标注,可以为pearsonr,spearmanr

plt.grid(linestyle = ‘--‘)

# 1、综合散点图 - JointGrid()
# 可拆分绘制的散点图
# plot_joint() + plot_marginals()

g = sns.JointGrid(x="total_bill", y="tip", data=tips)
# 创建一个绘图表格区域,设置好x、y对应数据

g = g.plot_joint(plt.scatter,color="g", s=40, edgecolor="white")   # 绘制散点图
plt.grid(linestyle = ‘--‘)

g.plot_marginals(sns.distplot, kde=True, color="g")                # 绘制x,y轴直方图

# 1、综合散点图 - JointGrid()
# 可拆分绘制的散点图
# plot_joint() + plot_marginals()
# kde - 密度图

g = sns.JointGrid(x="total_bill", y="tip", data=tips)
# 创建一个绘图表格区域,设置好x、y对应数据

g = g.plot_joint(sns.kdeplot,cmap = ‘Reds_r‘)             # 绘制密度图
plt.grid(linestyle = ‘--‘)

g.plot_marginals(sns.kdeplot, shade = True, color="r")  # 绘制x,y轴密度图

# 2、矩阵散点图 - pairplot()

sns.set_style("white")
# 设置风格

iris = sns.load_dataset("iris")
print(iris.head())
# 读取数据

sns.pairplot(iris,
            kind = ‘scatter‘,  # 散点图/回归分布图 {‘scatter’, ‘reg’}
            diag_kind="hist",  # 直方图/密度图 {‘hist’, ‘kde’}
            hue="species",   # 按照某一字段进行分类
            palette="husl",  # 设置调色板
            markers=["o", "s", "D"],  # 设置不同系列的点样式(这里根据参考分类个数)
            size = 1,   # 图表大小
            )

# 2、矩阵散点图 - pairplot()
# 只提取局部变量进行对比

sns.pairplot(iris,vars=["sepal_width", "sepal_length"],
             kind = ‘reg‘, diag_kind="kde",
             hue="species", palette="husl")

# 2、矩阵散点图 - pairplot()
# 其他参数设置

sns.pairplot(iris, diag_kind="kde", markers="+",
             plot_kws=dict(s=50, edgecolor="b", linewidth=1),
             # 设置点样式
             diag_kws=dict(shade=True)
             # 设置密度图样式
            )

# 2、矩阵散点图 - PairGrid()
# 可拆分绘制的散点图
# map_diag() + map_offdiag()

g = sns.PairGrid(iris,hue="species",palette = ‘hls‘,
                vars = [‘sepal_length‘,‘sepal_width‘,‘petal_length‘,‘petal_width‘],  # 可筛选
                )
# 创建一个绘图表格区域,设置好x、y对应数据,按照species分类

g.map_diag(plt.hist,
           histtype = ‘barstacked‘,   # 可选:‘bar‘, ‘barstacked‘, ‘step‘, ‘stepfilled‘
           linewidth = 1, edgecolor = ‘w‘)
# 对角线图表,plt.hist/sns.kdeplot

g.map_offdiag(plt.scatter,
              edgecolor="w", s=40,linewidth = 1,   # 设置点颜色、大小、描边宽度
             )
# 其他图表,plt.scatter/plt.bar...

g.add_legend()
# 添加图例

# 2、矩阵散点图 - PairGrid()
# 可拆分绘制的散点图
# map_diag() + map_lower() + map_upper()

g = sns.PairGrid(iris)
g.map_diag(sns.kdeplot, lw=3)   # 设置对角线图表
g.map_upper(plt.scatter, color = ‘r‘)     # 设置对角线上端图表
g.map_lower(sns.kdeplot, cmap="Blues_d")      # 设置对角线下端图表

原文地址:https://www.cnblogs.com/shengyang17/p/9693991.html

时间: 2024-11-08 01:40:33

Python图表分布数据可视化:Seaborn的相关文章

Python图表数据可视化Seaborn:2. 分类数据可视化

1. 分类数据可视化 - 分类散点图 stripplot() / swarmplot() import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns % matplotlib inline sns.set_style("whitegrid") sns.set_context("paper") # 设置风格.尺度 import warnings

Python图表数据可视化Seaborn:3. 线性关系| 时间线| 热图

1. 线性关系数据可视化 lmplot() import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns % matplotlib inline sns.set_style("darkgrid") sns.set_context("paper") # 设置风格.尺度 import warnings warnings.filterwarnings

使用 jupyter-notebook + python + matplotlib 进行数据可视化

上次用 python 脚本中定期查询数据库,监视订单变化,将时间与处理完成订单的数量进行输入写入日志,虽然省掉了人为定时查看数据库并记录的操作,但是数据不进行分析只是数据,要让数据活起来! 为了方便看出已完成订单的趋势,又不想想到使用Excel, 想到手动绘制表格填入数据就充满了抵触,哈哈,能用代码完成的事绝不手操,不能愧对python! 先确保python环境和pip已经安装好 这个过程分为3步: 安装 jupyter-notebook  ——>  安装matplotlib  ——> 写代码

Python图表数据可视化Seaborn:4结构化图表可视化

1.基本设置 import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns % matplotlib inline sns.set_style("ticks") sns.set_context("paper") # 设置风格.尺度 import warnings warnings.filterwarnings('ignore') # 不发出警告

Python数据可视化—seaborn简介和实例

Seaborn其实是在matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易,在大多数情况下使用seaborn就能做出很具有吸引力的图.这里实例采用的数据集都是seaborn提供的几个经典数据集,dataset文件可见于Github.本博客只总结了一些,方便博主自己查询,详细介绍可以看seaborn官方API和example gallery,官方文档还是写的很好的.原文链接:https://blog.csdn.net/qq_34264472/article/details/5

数据可视化 seaborn绘图(2)

统计关系可视化 最常用的关系可视化的函数是relplot seaborn.relplot(x=None, y=None, hue=None, size=None, style=None, data=None, row=None, col=None, col_wrap=None, row_order=None, col_order=None, palette=None, hue_order=None, hue_norm=None, sizes=None, size_order=None, size

Python数据处理和数据可视化

工具1:numpy 下载地址:http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy 入门文档:https://docs.scipy.org/doc/numpy-dev/user/quickstart.html 工具2:matplotlib 下载地址:http://www.lfd.uci.edu/~gohlke/pythonlibs/#matplotlib 入门文档:https://matplotlib.org/users/pyplot_tutorial

python matplotlib(数据可视化)

吐槽 网上搜了不少matplotlib安装方法(不信,你可以试试.) 我只能说,除了太繁琐,就是没什么用! 如果你是python3.6.5版本 我给你最最最正确的建议: 直接打开cmd,找到pip用命令pip install matplotlib pip帮你解决所有问题,不信可以试试!(帮你安装numpy......) 博主不吹不黑!亲自尝试! 看了许多要么繁琐要么没什么用的东西还照着搞了几个小时,心情着实不好! 顺便说一句,如果你安装的时候不小心断电了或者你老妈拔了你的网线让你去相亲,记得用

Python - matplotlib 数据可视化

在许多实际问题中,经常要对给出的数据进行可视化,便于观察. 今天专门针对Python中的数据可视化模块--matplotlib这块内容系统的整理,方便查找使用. 本文来自于对<利用python进行数据分析>以及网上一些博客的总结. 1  matplotlib简介 matplotlib是Pythom可视化程序库的泰斗,经过几十年它仍然是Python使用者最常用的画图库.有许多别的程序库都是建立在它的基础上或直接调用它,比如pandas和seaborn就是matplotlib的外包, 它们让你使用