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知识库 -> Python seaborn大更新,带来全新绘图方式seaborn.objects -> 正文阅读

[Python知识库]Python seaborn大更新,带来全新绘图方式seaborn.objects

在今年1月份时,seaborn曾对外宣称👉参考ggplot2,seaborn将迎来超大版本更新!,但是,具体时间待定!

在9月6日,seaborn的作者

目录

1 新版seaborn安装

2 详解新版seaborn部分功能

2.1 导入seaborn.objects

2.2 链式调用

2.3 图形外观设置-更少依赖matplotlib?

2.4 与matplotlib和谐共处

2.5 优雅绘制分面图

?2.6 随处使用Plot对象?

3 小结?


Michael Waskom博士激动的宣布了seaborn V0.12版本的发布 (为了该版本,他们已经过多年设计和长达16个月的coding实现,向开源大佬们致敬respect),

seaborn 0.12版本最大更新在于引入了新的绘图方式seaborn.objects:

seaborn.objects使用全新的end-to-end的链式调用法绘图;

seaborn.objects底层采用了图层图形语法 (the grammar of graphics,详细介绍👉ggplot2与图层图形语法),灵感来自seaborn 10年的开发积累、ggplot2及?vega-lite等知名可视化工具;

seaborn.objects的加入会让seaborn变的更加可组合、可扩展、对matplotlib依赖更小;

但是,v0.12也是个“测试版本”,功能可能不完善,后续的稳定版本可能会带来更大的改变,拭目以待。

同时,seaborn之前sns那种绘图方式依旧可用,可参考这些文章:

Matplotlib太臃肿,试试Seaborn

Python可视化|Matplotlib&Seaborn36(完结篇)

Python可视化matplotlib&seborn16-相关性heatmap

本文重点介绍seaborn.objects几个很有用的新功能~


1 新版seaborn安装

通过以下即可轻松将seaborn升级到最新版本v0.12 (升级后不影响老版本功能使用),

pip install seaborn==0.12

conda list seaborn查看是否安装成功,?

会发现,seaborn v0.12已经安装成功了。


2 详解新版seaborn部分功能

2.1 导入seaborn.objects

全新的导入方法,

# 全新的导入模式
import seaborn.objects as so

#区别于之前的import seaborn as sns

2.2 链式调用

seaborn.objects使用链式调用函数绘图,将多个图层通过“.”叠加,和R ggplot2中的“+”一个意思;函数Plot用于添加最基础的图层,其它图层通过“.”依次叠加;

Plot图层中可设置全局格式、其它图层设置对应图层格式,如下图,

可以通过几个例子理解下,

penguins = sns.load_dataset("penguins") #导入数据
(
    so.Plot( # Plot图层设置全局格式
        penguins, x="bill_length_mm", y="bill_depth_mm",
        edgecolor="sex", edgewidth="body_mass_g",
    )
    .add(so.Dot(color=".8"))#Dot图层设置当前散点颜色等
)

import seaborn as sns
#导入seaborn内置数据集
tips = sns.load_dataset("tips") 

#绘图
(  #使用时,将所有代码包在()中,类似plotnine
    so.Plot(tips, x="total_bill", y="tip",
            color="time")  #基础图层添加所有图层的绘图数据,x轴为"total_bill", y轴为"tip"
    .add(so.Dots())  #添加图层绘制散点图,散点按照Plot图层中的"time"改变颜色
    .add(so.Line(color="red"), so.PolyFit(), color=None)  #添加图层绘制折线图
)


2.3 图形外观设置-更少依赖matplotlib?

主要依赖scale函数,设置颜色、坐标轴、图例、marker等图形外观属性,不再过度依赖matplotlib。

图形颜色、size设置,

diamonds = sns.load_dataset("diamonds") 
(
    so.Plot(diamonds, x="carat", y="price", color="clarity", pointsize="carat")
    .add(so.Dots())
    .scale(color=("#88c", "#555"), pointsize=(2, 10)) #scale图层中设置点颜色、大小
)

?图形颜色、size、marker等设置,

(
    so.Plot(diamonds, x="carat", y="price", color="carat", marker="cut")
    .add(so.Dots()) #添加图层绘制散点图
    .scale( #添加图层个性化图形外观
        color=so.Continuous("crest", norm=(0, 3), trans="sqrt"), #设置点的颜色
        marker=so.Nominal(["o", "+", "x"], order=["Ideal", "Premium", "Good"]),#设置点的marker
    )
)

刻度标签、图例等个性化设置

主要使用Continuous().tick、Continuous().label方法

(
    so.Plot(diamonds, x="carat", y="price", color="carat")
    .add(so.Dots())
    .scale(
        x=so.Continuous().tick(every=0.5), #x轴刻度间隔设置为0.5
        y=so.Continuous().label(like="${x:.0f}"),#y轴刻度格式设置
        color=so.Continuous().tick(at=[1, 2, 3, 4]),
    )
)

标题、坐标轴范围、刻度设置

主要使用?Plot.label(), Plot.limit()和Plot.share()方法,

(
    so.Plot(penguins, x="body_mass_g", y="species", color="island")
    .facet(col="sex")
    .add(so.Dot(), so.Jitter(.5))
    .share(x=True) #x轴是否使用同一刻度
    .limit(y=(2.5, -.5)) #y轴范围设置
    .label(
        x="Body mass (g)", y="",
        color=str.capitalize,
        title="{} penguins".format,
    ) #label个性化标题
)


2.4 与matplotlib和谐共处

??注意,此处使用了subfigure,subfigure在matplotlib?v3.4版本才出现, 下面的案例需要matplotlib?v3.4之后版本才支持,否则报错,

f = mpl.figure.Figure(figsize=(8, 4))
sf1, sf2 = f.subfigures(1, 2) #subfigures
(
    so.Plot(penguins, x="body_mass_g", y="flipper_length_mm")
    .add(so.Dots()) #左边子图添加散点图
    .on(sf1)
    .plot()
)
(
    so.Plot(penguins, x="body_mass_g")
    .facet(row="sex")
    .add(so.Bars(), so.Hist()) #右边子图添加bar和hist图
    .on(sf2)
    .plot()
)


2.5 优雅绘制分面图

主要使用Plot.facet、Plot.pair方法,功能类似之前seaborn的方法sns.PairGrid、sns.pairplot,但是,个性化更简单,

healthexp = sns.load_dataset("healthexp")
(
    so.Plot(healthexp, x="Year", y="Life_Expectancy")
    .facet("Country", wrap=3) #facet分面
    .add(so.Line(alpha=.3), group="Country", col=None) #各子图属性设置更方便
    .add(so.Line(linewidth=3))
)

Plot facet结合pair使用

(
    so.Plot(penguins, y="body_mass_g", color="species")
    .pair(x=["bill_length_mm", "bill_depth_mm"])
    .facet(row="sex")#pair结合facet使用
    .add(so.Dots())
)


?2.6 随处使用Plot对象?

可以将Plot对象存入变量,然后灵活添加图层,

# 构建基础图层
p = so.Plot(healthexp, "Year", "Spending_USD", color="Country")

# 给图层添加折线
p.add(so.Line())

# 给图形添加面积图、堆叠图
p.add(so.Area(), so.Stack())


3 小结?

以上只是介绍了几个小编感觉很有用的更新,更详细的

seaborn.objects确实如当初宣称的那样,弥补了seaborn老版本子图难实现、个性化难、需要重度依赖matplotlib的缺陷;

seaborn.objects使用图层图形语法,ggplot2的粉丝们有福了;

seaborn.objects本版本不是稳定版本,期待后续版本更多惊喜;

最后,感谢seaborn的开发者们无私奉献,小伙伴们可以分享让更多需要的人受益。

参考:http://seaborn.pydata.org/whatsnew/v0.12.0.html

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-10-17 12:28:59  更:2022-10-17 12:30:33 
 
开发: 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年12日历 -2024/12/26 1:32:11-

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