r语言ggplot2 多线图绘制图例_plotnine: Python版的ggplot2作图库

腾讯课堂 | Python网络爬虫与文本数据分析

同样的基本作图任务,plotnine比matplotlib和seaborn代码量少,更美观。所以我又重新发一遍,大家可以先收藏起来,后面总有用到的时候~

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

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

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

  • plotnine文档 https://plotnine.readthedocs.io/en/latest/
  • R语言ggplot2文档 https://ggplot2.tidyverse.org/reference/index.html

安装

pip install plotnine

准备数据

from plotnine.data import mpg

#dataframe
mpg.head()
manufacturermodeldisplyearcyltransdrvctyhwyflclass
0audia41.819994auto(l5)f1829pcompact
1audia41.819994manual(m5)f2129pcompact
2audia42.020084manual(m6)f2031pcompact
3audia42.020084auto(av)f2130pcompact
4audia42.819996auto(l5)f1626pcompact

快速作图qplot

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

  • 横坐标displ
  • 纵坐标cty
  • 数据mpg
from plotnine import qplot

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

2c21d2edd5cebf26e154b8c99f629e74.png


ggplot图层

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

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

  • 数据mpg
  • 横坐标x轴为displ
  • 纵坐标y轴cty

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

from plotnine import ggplot, geom_point, aes

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

ea5f176c35856f91486695a9488684a6.png


图层叠加

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

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

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

2c21d2edd5cebf26e154b8c99f629e74.png


color

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

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

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

62996e468dcb0136fdedf51910956f29.png


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

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

0e4940bfd7daea1d900d05291efc97e0.png



size

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

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

b2b0265f6c1c0da907f0244dc2a21237.png



梯度色

如果你想自己设置颜色的梯度,可以通过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')
)

c33c2b41fb89c23fdfffe31f033fa87e.png


条形图

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
variablecategoryvalue
0genderFemale60
1genderMale40
2age1-2450
3age25-5430
4age55+20
5incomeLo10
6incomeLo-Med25
7incomeMed25
8incomeHigh40
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
)

1faf817cff8fc12a32f540367e034a18.png


from plotnine.data import economics_long

economics_long.head()
datevariablevaluevalue01
01967-07-01pce507.40.000000
11967-08-01pce510.50.000266
21967-09-01pce516.30.000764
31967-10-01pce512.90.000472
41967-11-01pce518.10.000918
from plotnine import ggplot, aes, geom_line

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

e341d654ccdd3ad9a2552e24ee7547e8.png


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

  • plotnine文档 https://plotnine.readthedocs.io/en/latest/
  • R语言ggplot2文档 https://ggplot2.tidyverse.org/reference/index.html

往期文章

[更新] Python网络爬虫与文本数据分析 rpy2库 | 在jupyter中调用R语言代码plydata库 | 数据操作管道操作符>>tidytext | 耳目一新的R-style文本分析库七夕礼物 | 全网最火的钉子绕线图制作教程读完本文你就了解什么是文本分析文本分析在经管领域中的应用概述  综述:文本分析在市场营销研究中的应用plotnine: Python版的ggplot2作图库小案例: Pandas的apply方法  stylecloud:简洁易用的词云库 用Python绘制近20年地方财政收入变迁史视频  Wow~70G上市公司定期报告数据集漂亮~pandas可以无缝衔接Bokeh  YelpDaset: 酒店管理类数据集10+G  

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

分享”和“在看”是更好的支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/374464.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单元和集成测试的代码覆盖率

我最近在一个宠物项目中着手构建自动化的UI(集成)测试以及普通的单元测试。 我想将所有这些集成到我的Maven构建中,并提供代码覆盖率报告,以便我可以了解测试覆盖率不足的区域。 我不仅发布了项目的源代码,还整理了一个…

javascript事件与event对象的属性

javascript事件列表解说事件浏览器支持解说一般事件onclickIE3、N2鼠标点击时触发此事件ondblclickIE4、N4鼠标双击时触发此事件onmousedownIE4、N4按下鼠标时触发此事件onmouseupIE4、N4鼠标按下后松开鼠标时触发此事件onmouseoverIE3、N2当鼠标移动到某对象范围的上方时触发此…

感想

读完三篇文章看到了前辈们的努力与坚持和对各自的学科的热爱,以及各位前辈的奋斗的艰苦环境,我与那些前辈相比也许还达不到前辈们的那种级别,但是我的学习的条件却比那些前辈们好的多,看完前辈们的奋斗史,以及前辈们的…

python学生分布_Python数据分析实战之分布分析

前言 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。 作者:严小样儿 分布分析法,一般是根据分析目的,将数据进行分组,研究各组别分布规律的一种分析方法。…

使用Spring Security 3.1保护RESTful Web服务,第3部分

1.概述 本教程显示了如何使用Spring和基于Java的Spring Security 3.1来保护REST服务 。 本文将重点介绍如何使用“登录和Cookie”方法专门针对REST API设置安全配置。 2. Spring Security的体系结构完全基于Servlet过滤器,因此,在HTTP请求处理方面&…

一次完整的HTTP请求所经历的7个步骤

HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤: 1、建立TCP连接 在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共…

jQuery基础--样式篇(3)

1.jQuiery对象与DOM对象   对于刚刚接触jQuery的初学者,我们要清楚认识一点:jQuery对象与DOM对象是不一样的。可能一时半会分不清楚哪些是jQuery对象,哪些是DOM对象,下面重点介绍一下jQuery对象,以及两者相互间的转换…

hls fifo_HLS优化方法DATAFLOW你用了吗

上期内容:异步跨时钟域电路该怎么约束DATAFLOW作为HLS的一种优化方法,对于改善吞吐率(Throughput)、降低延迟(Latency)非常有效。DATAFLOW的作用对象DATAFLOW可以作用于函数,也可以作用于for循环。如下图所示(图片来源Figure62, Figure 63, u…

Java 8虚拟扩展方法

我一直关注Java 8 Lambda表达式项目的发展已经有一段时间了,我对其当前的进展状态感到非常兴奋。 我发现的最新“易于理解”的演示文稿是这样的: http://blogs.oracle.com/briangoetz/resource/devoxx-lang-lib-vm-co-evol.pdf 现在,作为一名…

python爬虫 库_七款必备的Python爬虫库,你知道几个?

很多你需要的信息数据都是在网站内,虽然有些网站的数据会以整洁、结构化的形式呈现,但大部分网站却无法做到这样。因此,当你想要获得一些数据的时候,你需要一些爬虫工具帮助抓取,然后再对其进行分析。今天,…

62个Android Studio小技巧合集

转载: 原文链接:http://laobie.github.io/android/2016/02/14/android-studio-tips.html转载于:https://www.cnblogs.com/kesteler/p/5618490.html

在Hibernate,EhCache,Quartz,DBCP和Spring中启用JMX

继续使用JMX的过程(请参阅: 人类JMX ),我们将学习如何在一些流行的框架中启用JMX支持(通常是统计和监视功能)。 这些信息大部分都可以在项目的主页上找到,但是我决定在收集这些信息的同时&#…

二叉树遍历(前中后)

二叉树前序遍历&#xff1a; /*** Definition for binary tree* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/ class Solution { public:vector<int> preorderTravers…

python语言程序设计实践教程答案实验六_Python程序设计实践教程

书名&#xff1a;Python程序设计实践教程 定价&#xff1a;29.8 ISBN&#xff1a;9787115532602 作者&#xff1a;储岳中 薛希玲 版次&#xff1a;*1版 出版时间&#xff1a;2020-04 内容提要&#xff1a; 本书是Python语言程序设计的配套实践教材&#xff0c;分为三部分&#…

400多万微信用户如何“变现”?凯叔说了五大秘诀与教训

凯叔&#xff0c;原名王凯&#xff0c;自媒体“凯叔讲故事”创始人&#xff0c;近日在狮享家班委会上做了分享&#xff0c;全是实实在在的实验性方法论。以下是王凯的分享内容&#xff0c;整理 / 垅青 我讲的主题叫“基于内容的MVP探索”&#xff0c;MVP是什么东西&#xff1f;…

使用dbUnit,JSON,HSQLDB和JUnit规则进行数据库单元测试

在本周TDD课程的运行中&#xff0c;我认为编写一些夹具以简化dbUnit的使用将很有趣。 我最初的想法只是教dbUnit有关JSON的知识&#xff0c;但事实证明Lieven Doclo已经做到了。 因此&#xff0c;我决定更进一步&#xff0c;还将dbUnit与JUnit Rules结合起来&#xff0c;并提供…

Codeforces Round #321 (Div. 2) E. Kefa and Watch 线段树hash

E. Kefa and Watch Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/580/problem/EDescription One day Kefa the parrot was walking down the street as he was on the way home from the restaurant when he saw something glittering by…

python文字游戏源代码求年纪_Python实现猜年龄游戏代码实例

1. 在猜年龄的基础上编写登录、注册方法&#xff0c;并且把猜年龄游戏分函数处理&#xff0c;如 2. 登录函数 3. 注册函数 4. 猜年龄函数 5. 选择奖品函数 代码如下 import json real_age 18 prize_list [好迪洗发水, 绿箭侠, 小猪佩奇, 布娃娃, 再来一次!] import random us…

KVC 与 KVO

一、Key-Value Coding (KVC)键值编码 KVC&#xff0c;即是指 NSKeyValueCoding&#xff0c;一个非正式的 Protocol&#xff0c;提供一种机制来间接访问对象的属性。KVO 就是基于 KVC 实现的关键技术之一。 一个对象拥有某些属性。比如说&#xff0c;一个 Person 对象有一个 nam…

使用模拟的单元测试–测试技术5

我的最后一个博客是有关测试代码方法的一系列博客中的第四篇&#xff0c;演示了如何创建使用存根对象隔离测试对象的单元测试。 今天的博客探讨了有时被视为对立的技术&#xff1a;使用模拟对象进行单元测试。 同样&#xff0c;我使用了从数据库检索地址的简单方案&#xff1a;…