热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python数据可视化seaborn(四)——分类数据可视化

之前的文章关注的是两个变量都是数值变量的情况,当有一个变量是分类变量的时候,我们就需要其他类型的图形来展示分析数据。在seaborn中有多种类型的图形且非常易于上手。import num

之前的文章关注的是两个变量都是数值变量的情况,当有一个变量是分类变量的时候,我们就需要其他类型的图形来展示分析数据。在seaborn中有多种类型的图形且非常易于上手。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inlinesns.set(style="whitegrid",font_scale=1.4,context="paper")
# 设置风格、尺度
import warnings
warnings.filterwarnings('ignore')
# 不发出警告

seaborn中,分类图主要分为三个部分:

  • 分类散点图:
    • stripplot(默认,kind = “strip”)
    • swarmplot(kind = “swarm”)
  • 分类分布图:
    • boxplot(kind=“box”)
    • violinplot(kind=“violin”)
    • boxenplot(kind=“boxen”)
  • 分类估计图:
    • pointplot(kind=“point”)
    • barplot(kind=“bar”)
    • countplot(kind=“count”)

以上三种系列分别代表了不同粒度级别的数据。当然,在实际使用的过程中,其实没有必要记住这么多,因为seaborn中的分类系列有统一的图形界面catplot(),只需要这一个函数,就能访问所有分类图像类型。

分类散点图

seaborn.stripplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None, jitter=True, dodge=False, orient=None, color=None, palette=None, size=5, edgecolor=‘gray’, linewidth=0, ax=None, **kwargs)

  • jitter : 是否抖动,True,false or float
  • dodge : 当有hue参数时,是否沿轴分离不同颜色
  • orient : 图形方向,垂直(“v”)或者水平(“h”)

# 1、catplot() 默认情况下,kind='strip'
# 按照不同类别对样本数据进行分布散点图绘制tips = sns.load_dataset("tips")
print(tips.head())
# 加载数据sns.catplot(x="day", # x → 设置分组统计字段y="total_bill", # y → 数据分布统计字段# 这里xy数据对调,将会使得散点图横向分布data=tips, # data → 对应数据jitter = True, height=6, #当点数据重合较多时,jitter可以控制点抖动,也可以设置间距如:jitter = 0.1s = 6, edgecolor = 'w',linewidth=1,marker = 'o' , # 设置点的大小、描边颜色或宽度、点样式)

total_bill tip sex smoker day time size
0 16.99 1.01 Female No Sun Dinner 2
1 10.34 1.66 Male No Sun Dinner 3
2 21.01 3.50 Male No Sun Dinner 3
3 23.68 3.31 Male No Sun Dinner 2
4 24.59 3.61 Female No Sun Dinner 4

在这里插入图片描述

# 1、stripplot()
# 通过kind='swarm' 来调整点防止重合sns.catplot(x="day", y="total_bill",kind='swarm',hue='sex',data=tips,height=5,s=5.5)
# 通过让点沿轴分布来防止重合,这只使用与较小数据集

在这里插入图片描述

# 1、stripplot()
# 设置调色盘sns.catplot(x="sex", y="total_bill", hue="day",data=tips, jitter=True,palette="Set2", # 设置调色盘dodge=True, # 是否拆分)

在这里插入图片描述

# 排序
print(tips['day'].value_counts())
# 查看day字段的唯一值sns.catplot(x="day", y="total_bill", data=tips,order = ['Sun','Sat'])
# order → 筛选类别,控制排序

Sat 87
Sun 76
Thur 62
Fri 19
Name: day, dtype: int64

在这里插入图片描述

分类分布图


箱线图 boxplot()

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)

  • saturation : float,颜色饱和度
  • fliersize : 异常值标记的大小
  • whis : float,超出IQR多少比例被视为异常值,默认1.5
  • notch : 是否用中位数设置凹槽

# 箱线图 catplot(kind='box')
sns.catplot(x='day', y='total_bill', data=tips,kind='box',linewidth=2, # 线宽width=0.6, # 箱之间的间隔比例fliersize=5, # 异常点大小palette='hls', # 调色板whis=1.5, # 设置IQRnotch=True, # 设置是否用中位数做凹槽order=['Thur', 'Fri', 'Sat', 'Sun'], #筛选类别)

在这里插入图片描述

# 通过hue参数再分类
# 多种类型图混合# 绘制箱型图
sns.catplot(x="day", y="total_bill", data=tips,kind='box',hue = 'smoker',height=6)# 绘制散点图
sns.swarmplot(x="day", y="total_bill", data=tips,color ='k',s= 3,alpha = 0.8)
# 添加分类散点图,这里添加散点图要用各自的函数swarmplot()
# 不能再用高级端口catplot() 否则就是两个图了

在这里插入图片描述

对于数据量较大的数据集,散点图会显的很拥挤,这时我们可以使用boxenplot(),这种图表类似箱线图,既能够展示数据的分布也可以如箱线图展示数据的统计信息

diamonds = sns.load_dataset("diamonds")
print(diamonds.head(3))
sns.catplot(x='color',y='price',kind='boxen',data=diamonds.sort_values("color"),height=6)

carat cut color clarity depth table price x y z
0 0.23 Ideal E SI2 61.5 55.0 326 3.95 3.98 2.43
1 0.21 Premium E SI1 59.8 61.0 326 3.89 3.84 2.31
2 0.23 Good E VS1 56.9 65.0 327 4.05 4.07 2.31

在这里插入图片描述

提琴图

小提琴图将核密度估计和箱线图结合起来

seaborn.violinplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None, bw=‘scott’, cut=2, scale=‘area’, scale_hue=True, gridsize=100, width=0.8, inner=‘box’, split=False, dodge=True, orient=None, linewidth=None, color=None, palette=None, saturation=0.75, ax=None, **kwargs)

  • bw : (“scott”,“silverman”,float),核大小的比例因子,实际效果是越大越平滑。
  • cut : float,用于将密度扩展到极端数据点之外的距离,设置为0以将小提琴范围限制在观测数据的范围内。
  • scale : 小提琴图的宽度:area-面积相同,count-按照样本数量决定宽度,width-宽度一样
  • scale_hue : bool,当有hue时,决定实在分组内还是图上所有小提琴计算缩放比例
  • gridsize : 和必读估计离散网格中的点数,越高越平滑
  • inner : (“box”, “quartile”, “point”, “stick”, None),内部显示样式
  • split : 当有颜色嵌套是,是否分别绘制每侧的小提琴。

# 2、violinplot()
# 小提琴图sns.catplot(x="day", y="total_bill", data=tips,kind='violin',linewidth = 2, # 线宽width = 0.8, # 箱之间的间隔比例height=6,palette = 'hls', # 设置调色板order = ['Thur','Fri','Sat','Sun'], # 筛选类别scale = 'area', # 测度小提琴图的宽度:# area-面积相同,count-按照样本数量决定宽度,width-宽度一样gridsize = 30, # 设置小提琴图边线的平滑度,越高越平滑inner = 'box', bw = .5 # 控制拟合程度,一般可以不设置)

在这里插入图片描述

# 2、violinplot()
# 通过hue参数再分类sns.catplot(x="day", y="total_bill", data=tips,kind='violin',hue = 'smoker',palette="muted", split=True, # 设置是否拆分小提琴图inner="quartile",height=6)

在这里插入图片描述

# 2、violinplot()
# 结合散点图sns.catplot(x="day", y="total_bill", data=tips,kind='violin',palette = 'hls',inner = None,height=6,cut=0 # 设置为0,将图限制在观测数据范围内。)# 插入散点图
sns.swarmplot(x="day", y="total_bill", data=tips,color="k", alpha=.5)

在这里插入图片描述

统计图

seaborn.barplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None, estimator=, ci=95, n_boot=1000, units=None, orient=None, color=None, palette=None, saturation=0.75, errcolor=’.26’, errwidth=None, capsize=None, dodge=True, ax=None, **kwargs)

  • estimator : 分类箱内使用的统计函数
  • ci : (float,“sd”,None)
  • units : 变量名称,对变量的每个采样单独绘制,可用于绘制重复数据
  • errwidth : 误差线宽度
  • capsize : 误差条帽的宽度

# 1、barplot()
# 置信区间:样本均值 + 抽样误差
titanic = sns.load_dataset("titanic")
# print(titanic.head())
# 加载数据sns.catplot(x="sex", y="survived", data=titanic,kind='bar',palette = 'hls', hue="class",order = ['male','female'], # 筛选类别capsize = 0.05, # 误差线横向延伸宽度saturation=.8, # 颜色饱和度errcolor = 'gray',errwidth = 2, # 误差线颜色,宽度height=6,ci = 'sd'# 置信区间误差 → 0-100内值、'sd'、None)
print(titanic.groupby(['sex','class']).mean()['survived'])
print(titanic.groupby(['sex','class']).std()['survived'])
# 计算数据

sex class
female First 0.968085Second 0.921053Third 0.500000
male First 0.368852Second 0.157407Third 0.135447
Name: survived, dtype: float64
sex class
female First 0.176716Second 0.271448Third 0.501745
male First 0.484484Second 0.365882Third 0.342694
Name: survived, dtype: float64

在这里插入图片描述

# 1、barplot()
# 柱状图 - 置信区间估计
# 可以这样子改变风格sns.catplot(x="day", y="total_bill", data=tips,linewidth=2.5,facecolor=(1,1,1,0),kind='bar',edgecolor = 'k',)

在这里插入图片描述

# 1、barplot()crashes = sns.load_dataset("car_crashes").sort_values("total", ascending=False)
print(crashes.head())
# 加载数据f, ax = plt.subplots(figsize=(10, 15))
# 创建图表# sns.set_color_codes("pastel")
sns.barplot(x="total", y="abbrev", data=crashes,label="Total", color="b",edgecolor = 'w')
# 设置第一个柱状图# sns.set_color_codes("muted")
sns.barplot(x="alcohol", y="abbrev", data=crashes,label="Alcohol-involved", color="y",edgecolor = 'w')
# 设置第二个柱状图ax.legend(ncol=2, loc="lower right")
sns.despine(left=True, bottom=True)

total speeding alcohol not_distracted no_previous ins_premium \
40 23.9 9.082 9.799 22.944 19.359 858.97
34 23.9 5.497 10.038 23.661 20.554 688.75
48 23.8 8.092 6.664 23.086 20.706 992.61
3 22.4 4.032 5.824 21.056 21.280 827.34
17 21.4 4.066 4.922 16.692 16.264 872.51 ins_losses abbrev
40 116.29 SC
34 109.72 ND
48 152.56 WV
3 142.39 AR
17 137.13 KY

在这里插入图片描述

# 2、countplot()
# 计数柱状图sns.catplot(x="class", hue="who", data=titanic,kind='count',palette = 'magma')sns.catplot(y="class", hue="who", data=titanic,kind='count',palette = 'magma')
# x/y → 以x或者y轴绘图(横向,竖向)
# 用法和barplot相似

在这里插入图片描述

在这里插入图片描述

# 3、pointplot()sns.catplot(x="time", y="total_bill", hue = 'smoker',data=tips,kind='point',palette = 'hls',height=7,dodge = True, # 设置点是否分开join = True, # 是否连线markers=["o", "x"], linestyles=["-", "--"], # 设置点样式、线型)
# 计算数据
# # 用法和barplot相似

在这里插入图片描述


推荐阅读
  • 引号快捷键_首选项和设置——自定义快捷键
    3.3自定义快捷键(CustomizingHotkeys)ChemDraw快捷键由一个XML文件定义,我们可以根据自己的需要, ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • 湍流|低频_youcans 的 OpenCV 例程 200 篇106. 退化图像的逆滤波
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了youcans的OpenCV例程200篇106.退化图像的逆滤波相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • 用Vue实现的Demo商品管理效果图及实现代码
    本文介绍了一个使用Vue实现的Demo商品管理的效果图及实现代码。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
  • [echarts] 同指标对比柱状图相关的知识介绍及应用示例
    本文由编程笔记小编为大家整理,主要介绍了echarts同指标对比柱状图相关的知识,包括对比课程通过率最高的8个课程和最低的8个课程以及全校的平均通过率。文章提供了一个应用示例,展示了如何使用echarts制作同指标对比柱状图,并对代码进行了详细解释和说明。该示例可以帮助读者更好地理解和应用echarts。 ... [详细]
  • 浅谈EditText控件的inputType类型
    其中大多数是用不到的,这里总结一下常用的几种键盘效果1、numberDecimal(可以带小数点的浮点格式)只可以输入0-9数字和小数点,即只浮点数2、number(数字格式 )只 ... [详细]
author-avatar
diy2099_d94639
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有