plotnine: Python版的ggplot2作图库

Karen110 等级 756 0 0
标签: httpspython

R语言的ggplot2绘图能力超强,python虽有matplotlib,但是语法臃肿,使用复杂,入门极难,seaborn的出现稍微改善了matplotlib代码量问题,但是定制化程度依然需要借助matplotlib,使用难度依然很大。

而且咱们经管专业学编程语言,一直有一个经久不衰的问题-“学数据分析,到底选择R还是Python”。通过plotnine这个库,你就可以在python世界中体验下R语言的新奇感,体验可视化之美,如果着迷上瘾,再学R也不迟。

plotnine包,可以实现绝大多数ggplot2的绘图功能,两者语法十分相似,R和Python的语法转换成本大大降低。

安装

pip install plotnine  

准备数据

from plotnine.data import mpg  

#dataframe  
mpg.head()  

| | manufacturer | model | displ | year | cyl | trans | drv | cty | hwy | fl | class | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | 0 | audi | a4 | 1.8 | 1999 | 4 | auto(l5) | f | 18 | 29 | p | compact | | 1 | audi | a4 | 1.8 | 1999 | 4 | manual(m5) | f | 21 | 29 | p | compact | | 2 | audi | a4 | 2.0 | 2008 | 4 | manual(m6) | f | 20 | 31 | p | compact | | 3 | audi | a4 | 2.0 | 2008 | 4 | auto(av) | f | 21 | 30 | p | compact | | 4 | audi | a4 | 2.8 | 1999 | 6 | auto(l5) | f | 16 | 26 | p | compact |

快速作图qplot

我们先直接看最简单好用的快速作图函数qplot(x, y, data)

  • 横坐标displ

  • 纵坐标cty

  • 数据mpg

from plotnine import qplot  

qplot(x='displ',   
      y='cty',  
      data=mpg)  

plotnine: Python版的ggplot2作图库

`<ggplot: (322851325)>  
`

ggplot图层

qplot是快速作图函数,如果想让图更好看,进行私人订制,那么我们需要进行图层设计

首先设置ggplot图层(相当于买了一个高级画布),

  • 数据mpg

  • 横坐标x轴为displ

  • 纵坐标y轴cty

在plotnine中,变量所对应的数据均可通过字段名调用

from plotnine import ggplot, geom_point, aes  

ggplot(aes(x='displ', y='cty'), mpg)  

plotnine: Python版的ggplot2作图库

`<ggplot: (321957793)>  
`

图层叠加

我们可以看到,已经绘制出一个空的ggplot图层,x轴为displ,y轴为cty。

接下来我们给这个图层上加上数据对应的散点,使用geom_point()直接追加在ggplot图层之上即可。

(  
    ggplot(aes(x='displ', y='cty'), mpg)  
    + geom_point()  
)  

plotnine: Python版的ggplot2作图库

`<ggplot: (322466061)>  
`

color

在上图中,散点是没有区分每辆车的气缸数cyl。

在geom_point()中,我们可以按照气缸数cyl分门别类,按照颜色显示出来

(  
    ggplot(aes(x='displ', y='cty'), mpg)  
    + geom_point(aes(color='cyl'))  
)  

plotnine: Python版的ggplot2作图库

`<ggplot: (323647173)>  
`

上图挺好看的,有时候需要绘制的字段是离散型数值,但是上色后可能不够明显,需要声明该字段为离散型。这时候用factor()来告诉plotnine,这个字段是离散型数值

(  
    ggplot(aes(x='displ', y='cty'), mpg)  
    + geom_point(aes(color='factor(cyl)'))   
)  

plotnine: Python版的ggplot2作图库

`<ggplot: (321918425)>`

size

有时候为了增加可视化显示的维度数,还可以考虑加入点的大小size

(  
    ggplot(aes(x='displ', y='cty'), mpg)  
    + geom_point(aes(size='hwy'))  
)  

plotnine: Python版的ggplot2作图库

<ggplot: (323399013)>

梯度色

如果你想自己设置颜色的梯度,可以通过scale_color_gradient设置

from plotnine import scale_color_gradient  

(  
    ggplot(aes(x='displ', y='cty'), mpg)  
    + geom_point(aes(color='hwy'))  
    + scale_color_gradient(low='blue', high='red')  
)  

plotnine: Python版的ggplot2作图库

<ggplot: (323622897)>  

条形图

plotnine中可绘制的图有很多,刚刚已经讲了散点图,接下来我们看看plotnine中的条形图。

首先准备一下数据

import pandas as pd  

df = pd.DataFrame({  
    'variable': ['gender', 'gender', 'age', 'age', 'age', 'income', 'income', 'income', 'income'],  
    'category': ['Female', 'Male', '1-24', '25-54', '55+', 'Lo', 'Lo-Med', 'Med', 'High'],  
    'value': [60, 40, 50, 30, 20, 10, 25, 25, 40],  
})  
df['variable'] = pd.Categorical(df['variable'], categories=['gender', 'age', 'income'])  
df['category'] = pd.Categorical(df['category'], categories=df['category'])  

df  

| | variable | category | value | | --- | --- | --- | --- | | 0 | gender | Female | 60 | | 1 | gender | Male | 40 | | 2 | age | 1-24 | 50 | | 3 | age | 25-54 | 30 | | 4 | age | 55+ | 20 | | 5 | income | Lo | 10 | | 6 | income | Lo-Med | 25 | | 7 | income | Med | 25 | | 8 | income | High | 40 |

from plotnine import ggplot, aes, geom_text, position_dodge, geom_point  

#调整文本位置  
dodge_text = position_dodge(width=0.9)                              # new  

(  
    ggplot(df, aes(x='variable',   
                   y='value',   
                   fill='category')) #类别填充颜色  
    + geom_col(position='dodge',   
               show_legend=False)   # modified  
    + geom_text(aes(y=-.5, label='category'),                          # new  
                position=dodge_text,  
                color='gray',  #文本颜色  
                size=8,   #字号  
                angle=30, #文本的角度  
                va='top')  

 + lims(y=(-5, 60))                                                 # new  
)  

plotnine: Python版的ggplot2作图库

<ggplot: (334727813)>  
from plotnine.data import economics_long  

economics_long.head()  

| | date | variable | value | value01 | | --- | --- | --- | --- | --- | | 0 | 1967-07-01 | pce | 507.4 | 0.000000 | | 1 | 1967-08-01 | pce | 510.5 | 0.000266 | | 2 | 1967-09-01 | pce | 516.3 | 0.000764 | | 3 | 1967-10-01 | pce | 512.9 | 0.000472 | | 4 | 1967-11-01 | pce | 518.1 | 0.000918 |

from plotnine import ggplot, aes, geom_line  

(  
    ggplot(economics_long, aes(x='date', y='value01', color='variable'))  
    + geom_line()  
)  

plotnine: Python版的ggplot2作图库

<ggplot: (334895445)>  

plotnine目前已经支持绝大多数ggplot2,但是文档方面没有ggplot2全,所以学习plotnine时可以参考ggplot2。

**公众号后台回复关键词【plotnine入门】即可下载本文数据代码!**

**-----**------**-----**---**** End **-----**--------**-----**-****

往期精彩文章推荐:

plotnine: Python版的ggplot2作图库

欢迎各位大佬点击链接加入群聊【helloworld开发者社区】:https://jq.qq.com/?_wv=1027&k=mBlk6nzX进群交流IT技术热点。

本文转自 https://mp.weixin.qq.com/s/4wA4Jv_wog0fbKqeupoBEw,如有侵权,请联系删除。

收藏
评论区

相关推荐

Python的环境搭建和下载
Python是一个跨平台、可移植的编程语言,因此可在windows、Linux和Mac OS X系统中安装使用。 安装完成后,你会得到Python解释器环境,可以通过终端输入python命令查看本地是否已经按照python以及python版本。这里有一点需要注意的是,如果没有将python的安装目录添加到环境变量中,会报错(python不是内部命令或外部命
15. Python 程序运行速度如何提高十倍?第一遍滚雪球学 Python 收工
本篇文章将给大家介绍 Python 多线程与多进程相关知识,学习完该知识点之后,你的 Python 程序将进入另一个高峰。 <center<font colorred缓解一下视疲劳</font</center 15. Python 程序运行速度如何提高十倍?第一遍滚雪球学 Python 收工(https://imghelloworld.oss
Django+Vue开发生鲜电商平台之2.开发环境搭建
一、PyCharm的安装和简单使用 由于开发的主要后端语言是Python,因此选择PyCharm作为主要的开发工具。 PyCharm可以直接在搜索引擎中直接搜索官网下载,在每种平台均有社区版和专业版两种。社区版免费但功能有限,适合初学者;专业版功能齐全,适合专业开发者。开发者可以根据需要自行选择。 Windows下安装PyCharm与安装普通软件类似。
原来Python绘图也可以这么漂亮,这次真的是学习到了!
(https://imghelloworld.osscnbeijing.aliyuncs.com/8830803f033eeed85783e9058cf08968.png) 作者:朱小五 来源:快学Python 👆人生苦短,快学Python! 最近看了一篇文章《一个牛逼的Python 可视化库:PyG2Plot》,可惜只是简单介
被“词云”包围的冰冰会更好看吗?安排
(https://imghelloworld.osscnbeijing.aliyuncs.com/b299933deefc692934e8cc6141ab3894.png) 大家好,我是小五🐶 昨天「凹凸数据」发了一篇张同学投稿的文章《用Python爬取王冰冰vlog弹幕并制作词云(https://mp.weixin.qq.com/
Python Sanic 高并发服务开发指南
技术基础 AsyncIO Python 3.4 开始引入 AsyncIO(https://docs.python.org/3/library/asyncio.html) 模块,使得 Python 也支持异步 IO。3.5 版本里添加了 async/await 关键字,使得异步 IO 代码编写更加方便。3.6 和 3.7 版本继续进行了完善
我的python总结
建议刚开始学习直接使用ANACONDAhttps://www.anaconda.com/download/配置python环境变量https://docs.python.org/3.6/using/cmdline.htmlenvvarPYTHONMALLOCPython PEP8导包顺序1. Python标准
Django+Vue开发生鲜电商平台之2.开发环境搭建
一、PyCharm的安装和简单使用由于开发的主要后端语言是Python,因此选择PyCharm作为主要的开发工具。PyCharm可以直接在搜索引擎中直接搜索官网下载,在每种平台均有社区版和专业版两种。社区版免费但功能有限,适合初学者;专业版功能齐全,适合专业开发者。开发者可以根据需要自行选择。Windows下安装PyCharm与安
python的学习难?你的方法不对罢了,看看我的。
1、选择Python版本对于使用python的人来说,python的版本就是我们的工作环境,因此,在学习之前需要考虑好学习哪个版本,python2和python3的版本不同,会存在一些差异,虽说不大,但直接学习python3 的话相对来说会好一点,而且跑一趟还能3相对来说对零基础的小白来说更加的友好,容易上手。2、学习Python基础知识Python 是一个
小白看过来,今天带你了解python2和python3的区别
看到这个题目大家可能猜到了我接下来要讲些什么,呵呵,对了,那就是列出这两个不同版本间的却别!搜索一下大家就会知道,python有两个主要的版本,python2 和 python3 ,但是python又不同于其他语言,向下兼容,python3是不向下兼容的,但是绝大多数组件和扩展都是基于python2的,下面就来总结一下python2和python3的区别。
10行Python代码自动清理电脑内重复文件,解放双手!
](https://mp.weixin.qq.com/mp/appmsgalbum?actiongetalbum&albumid1337012041701326848&bizMzI1MTUyMjc1Mgwechatredirect) 前言 大家好,又到了Python办公自动化系列。今天分享一个系统层面的自动化案例:「给定一个文件夹,使用Python检查
元宵节就要到了,手把手教你用Python打造一款3D花灯
1 前言说起元宵节,各位有没有觉得这是咱们中国人最浪漫的节日呢?国人向来拘谨古板,一年到头都是小心谨慎地过日子,唯有元宵节这天可以纵情豪放一把。东风夜放花千树,宝马雕车香满路,火树银花霓虹闪烁,豪车遍地美女如云。细品,你甚至都能嗅到香奈儿的味道!月上柳梢头,人约黄昏后,这又是何等的浪漫!比起烛光晚宴、鲜花加持,这份浪漫更显纯真。晚至明清,民间元宵节的喜庆气氛
初窥 Python 的 import 机制
本文适合有 Python 基础的小伙伴进阶学习。 作者:pwwang一、前言本文基于开源项目: https://github.com/pwwang/pythonimportsystem补充扩展讲解,希望能够让读者一文搞懂 Python 的 import 机制。 1.1 什么是 import 机制?通常来讲,在一段 Python 代码中去执行引用另一个模块中
醒醒!Python已经支持中文变量名啦!
作者:豌豆花下猫来源:Python猫最近,我在翻阅两本比较新的 Python 书籍时,发现它们都犯了一个严重的低级错误!这两本书分别是《Python编程:从入门到实践》和《父与子的编程之旅》,它们都是畅销书,都在 2020 年 10 月出了新版本,都使用 Python3.7+ 版本的语法。然而,在关于变量的命名规则部分,它们犯下了一样的错误,即还在使用 Py
plotnine: Python版的ggplot2作图库
R语言的ggplot2绘图能力超强,python虽有matplotlib,但是语法臃肿,使用复杂,入门极难,seaborn的出现稍微改善了matplotlib代码量问题,但是定制化程度依然需要借助matplotlib,使用难度依然很大。 而且咱们经管专业学编程语言,一直有一个经久不衰的问题\“学数据分析,到底选择R还是Python”。通过plotnine这