IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Seaborn学习入门-绘制箱型图、直方图 -> 正文阅读

[Python知识库]Seaborn学习入门-绘制箱型图、直方图

关于数据集

在初学Seaborn遇到的第一个问题就是数据集,网上大部分示例都是直接调用内置的数据集,但这其实是联网状态下在线下载数据集,所以遇到网络问题很容易报错。
数据集网址:https://github.com/mwaskom/seaborn-data
因此更可靠的方式是把数据集下载下来然后在本地加载,而且之后个人使用本来也要加载本地数据集。
参考知乎文章
load_dataset包含有三个参数:

  1. name:str,代表数据集名字;
  2. data_home:string,代表本地数据的路径可见只要设置好数据路径,然后再把cache设为True即可从本地加载数据了。
  3. cache:boolean,当为True时,从本地加载数据,反之则从网上下载;

如下所示:

# Load Dataset
df = sns.load_dataset('iris',data_home='seaborn-data',cache=True)

# Plot
plt.figure(figsize=(10,8), dpi= 80)
sns.pairplot(df, kind="reg", hue="species")
plt.show()

常用操作

参见文章
Seaborn.set()与Seaborn.catplot() - CSDN
可视化“大佬”之Seaborn

绘制箱型图

参考文章 seaborn学习笔记1-箱形图Boxplot - CSDN

函数原型

seaborn.boxplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None, 
                orient=None, color=None, palette=None, saturation=0.75, width=0.8, dodge=True, fliersize=5, 
                linewidth=None, whis=1.5, notch=False, ax=None, **kwargs)

常用参数介绍

  • hue:字符换类型,用于区分类别
  • palette:调色板,可参看文章
  • order、hue_order:控制箱体的顺序
  • orient::取值为v、h,v为垂直(vertical)显示,h为水平(horizontal)显示

完整介绍

x,y,hue:数据字段变量名(如上表,date,name,age,sex为数据字段变量名)
作用:根据实际数据,x,y常用来指定x,y轴的分类名称,
hue常用来指定第二次分类的数据类别(用颜色区分)

data: DataFrame,数组或数组列表

order,hue_order:字符串列表
作用:显式指定分类顺序,eg. order=[字段变量名1,字段变量名2,...]

orient:方向:v或者h
作用:设置图的绘制方向(垂直或水平),
如何选择:一般是根据输入变量的数据类型(dtype)推断出来。

color:matplotlib 颜色

palette:调色板名称,list类别或者字典
作用:用于对数据不同分类进行颜色区别

saturation 饱和度:float

dodge:bool
作用:若设置为True则沿着分类轴,将数据分离出来成为不同色调级别的条带,
否则,每个级别的点将相互叠加

size:float
作用:设置标记大小(标记直径,以磅为单位)

edgecolor:matplotlib color,gray
作用:设置每个点的周围线条颜色

linewidth:float
作用:设置构图元素的线宽度

自定义坐标轴

至于如何自定义横纵坐标也很简单,和matplotlib一样就可以了,涉及到图例位置等也都一样。

import seaborn as sns
import matplotlib.pyplot as plt
 
sns.kdeplot(data)  # 核密度估计图
plt.xlabel("xxxxxx")
plt.show()

处理本地数据

需要先把实验数据转换为DataFrame格式,再用Seaborn处理。

import numpy as np
import pandas as pd

N = 500
delta1 = np.random.normal(loc =0.0 , scale= 1.0,size = (N,))
delta2 = np.random.normal(loc =0.4 , scale= 2.0,size = (N,))
delta3 = np.random.normal(loc =0.2 , scale= 1.3,size = (N,))
delta4 = np.random.normal(loc =1.4 , scale= 4.0,size = (N,))

df1 = pd.DataFrame(delta1,columns=['delta'])
df1['alpha_limit']  = 'Yes'
df1['Hierarchical'] = 'Yes'
df2 = pd.DataFrame(delta2,columns=['delta'])
df2['alpha_limit']  = 'Yes'
df2['Hierarchical'] = 'No'
df3 = pd.DataFrame(delta3,columns=['delta'])
df3['alpha_limit']  = 'No'
df3['Hierarchical'] = 'Yes'
df4 = pd.DataFrame(delta4,columns=['delta'])
df4['alpha_limit']  = 'No'
df4['Hierarchical'] = 'No'

df = pd.concat([df1,df2,df3,df4],axis=0)

sns.set()
sns.boxplot( x="alpha_limit", y="delta",data=df,hue="Hierarchical")
plt.xlabel('alpha limit')
plt.ylabel('delta theta')

效果图
在这里插入图片描述

绘制直方图

【参考文章】

绘制直方图所用函数为 distplot,但在Jupyter中会警告说 distplot 将来会被 displot 替代。
如果想要在一张图上叠加多组数据直方图的话直接加就可以了,设置好直方图的透明度即可。
在直方图中主要有以下几个元素

  • rug:频率分布,一般不常用,在底部以短线形式展示
  • kde:密度曲线
  • hist:箱

函数原型

rs = np.random.RandomState(10) #设定随机数种子
s = pd.Series(rs.randn(100) * 100)
sns.distplot(s, bins = 10, hist = True, kde = True, norm_hist = False,
            rug = True, vertical = True,
            color = 'b', label = 'distplot', axlabel = 'x')
plt.legend()

# 上述参数也不完整,但基本够用
# bins ---> 箱数,如果不设置的话会自动设置,有时设置为数据行数开平方
# hist、ked ---> 是否显示箱/密度曲线
# norm_hist ---> 直方图是否按照密度来显示。若为True,则直方图高度显示密度而非计数(含有KDE图形中默认为True)
# rug ---> 是否显示数据分布情况
# vertical ---> 是否水平显示
# color ---> 设置颜色
# label ---> 图例
# axlabel ---> x轴标注

示例

示例1

# 一般格式
# Load the Dataset in Python
tips = sns.load_dataset("tips",data_home='seaborn-data',cache=True)
sns.distplot(tips["total_bill"], bins=int(round(np.sqrt(tips.shape[0]))), 
             hist=True,kde=True,norm_hist=True,
             rug = True, vertical = True,color="purple")
# Binsize is calculated using square-root of row count.
# Binsize is calculated using square-root of row count.

在这里插入图片描述
示例2

import numpy as np
import pandas as pd

N = 500
delta1 = np.random.normal(loc =0.0 , scale= 1.0,size = (N,))
delta2 = np.random.normal(loc =0.4 , scale= 2.0,size = (N,))

df1 = pd.DataFrame(delta1,columns=['delta'])
df1['alpha_limit']  = 'Yes'
df1['Hierarchical'] = 'Yes'
df2 = pd.DataFrame(delta2,columns=['delta'])
df2['alpha_limit']  = 'Yes'
df2['Hierarchical'] = 'No'

sns.distplot(df1['delta'], bins=int(round(np.sqrt(df1.shape[0]))), 
             hist=True,kde=True,norm_hist=True,color="purple",
             label="df1", hist_kws={'alpha':.5}, kde_kws={'linewidth':2})
sns.distplot(df2['delta'], bins=int(round(np.sqrt(df2.shape[0]))), 
             hist=True,kde=True,norm_hist=True,color="green",
             label="df2", hist_kws={'alpha':.3}, kde_kws={'linewidth':2})
plt.legend()
plt.xlabel('x')
plt.ylabel('y')

在这里插入图片描述
在示例2中,为了精细化调整,采用了 hist_kws、kde_kws 这种写法,这种方式的完整形式可参考

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

设定密度曲线格式

有时密度曲线可以设置成拟合为具体的分布,如

x = np.random.normal(size=100)
sns.distplot(x, kde=False)  # kde 核密度估计
plt.show()
from scipy import stats, integrate
x = np.random.gamma(6, size=200)
sns.distplot(x, kde=False, fit=stats.gamma)  #拟合为正态分布则为stats.norm
plt.show()

求取均值、方差、标准差

如果假定就是正态分布的话,有时可能还需要求均值、方差、标准差,此时用pandas直接求取即可。

m1 = df1['delta'].mean()
v1 = df1['delta'].var()
s1 = df1['delta'].std()

print(f'm1={m1:.3f}, v1={v1:.3f}, s1={s1:.3f}')
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-08-04 11:09:46  更:2021-08-04 11:12:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 6:49:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码