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构建中,并提供代码覆盖率报告,以便我可以了解测试覆盖率不足的区域。 我不仅发布了项目的源代码,还整理了一个…

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

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

hls fifo_HLS优化方法DATAFLOW你用了吗

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

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

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

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

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

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

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

多线程中的volatile和伪共享

伪共享 false sharing,顾名思义,“伪共享”就是“其实不是共享”。那什么是“共享”?多CPU同时访问同一块内存区域就是“共享”,就会产生冲突,需要控制协议来协调访问。会引起“共享”的最小内存区域大小就是一个cache…

C语言代码规范(一)缩进与换行

一、缩进的空格数为4个。最好配置代码编辑器将TAB键设置为空格替换&#xff0c;避免出现另一个编辑器打开时格式变乱的情况。 例如Notepad设置 KEIL设置 二、“{” 和 “}”各自独占一行。 不规范例子&#xff1a; for(i 0; i < student_num; i) { if((score[i] > 0…

armv7 cortex a系列编程手册_AWTK能为现代GUI编程带来何种改变?

AWTK是一个伸缩性极强的嵌入式图形框架&#xff0c;它的诞生会给GUI编程研发工程师带来哪些改变&#xff1f;AWTK是一个伸缩性极强的嵌入式图形框架&#xff0c;可在Cortex-M3这样低端的单片机上运行&#xff0c;也可以在Cortex-A7/A8/A9等处理器&#xff0c;甚至DSP以及X86处理…

为什么要编写单元测试–测试技巧8

我对最近在“您应该测试什么”上的博客有很多反应&#xff0c;有些人出于各种原因同意我的想法&#xff0c;另一些人则认为建议某些类可能不需要单元测试是非常危险的。 已经处理了什么测试&#xff0c;今天的博客涉及为什么要编写单元测试&#xff0c;而今天的示例代码是基于一…

c++ 多重背包状态转移方程_动态规划入门——详解经典问题零一背包

本文始发于个人公众号&#xff1a;TechFlow&#xff0c;原创不易&#xff0c;求个关注今天是周三算法与数据结构专题的第12篇文章&#xff0c;动态规划之零一背包问题。在之前的文章当中&#xff0c;我们一起探讨了二分、贪心、排序和搜索算法&#xff0c;今天我们来看另一个非…

python定义一个圆_Python-矩形和圆形

原博文 2019-11-11 12:34 − Exercise 15.1. 定义一个叫做Circle 类&#xff0c;类的属性是圆心 (center) 和半径 (radius) , 其中&#xff0c;圆心 (center) 是一个 Point 类&#xff0c;而半径 (radius) 是一个数字。 实例化一个圆心 (center) 为 (150, 100) &#xff0c;半…

STM32F1笔记(一)GPIO输出

GPIO&#xff1a;General Purpose Input Output &#xff08;通用输入/输出&#xff09;。 GPIO最经典应用&#xff1a;LED灯。 先看电路。声明&#xff1a;参考正点原子战舰开发板。 与LED串联的电阻称为限流电阻。 限流电阻计算公式&#xff1a;R(U-LED压降)/20ma。 U为LE…

dataframe转化为array_【Python专栏】12 种高效 Numpy 和 Pandas 函数为你加速分析

来源&#xff1a;机器之心编译&#xff1a;Jamin、杜伟、张倩我们都知道&#xff0c;Numpy 是 Python 环境下的扩展程序库&#xff0c;支持大量的维度数组和矩阵运算&#xff1b;Pandas 也是 Python 环境下的数据操作和分析软件包&#xff0c;以及强大的数据分析库。二者在日常…

具有GlassFish和一致性的高性能JPA –第1部分

您以前听说过连贯性吗&#xff1f; 大概是。 它是那些著名的内存网格解决方案之一&#xff0c;该解决方案承诺了超快的数据访问速度和对经常使用的数据的无限空间。 一些众所周知的竞争对手是Infinispan &#xff0c; Memcached和Terracotta Ehcache 。 它们都很棒&#xff0c;…

boost原理与sklearn源码_机器学习sklearn系列之决策树

一、 Sklearn库 Scikit learn 也简称 sklearn, 自2007年发布以来&#xff0c;scikit-learn已经成为Python重要的机器学习库了。支持包括分类、回归、降维和聚类四大机器学习算法。还包含了特征提取、数据处理和模型评估三大模块。sklearn是Scipy的扩展&#xff0c;建立在NumPy和…

STM32F1笔记(二)GPIO输入

STM32 GPIO输入的经典应用是按键。 先看电路。声明&#xff1a;参考正点原子战舰开发板。 在这里可以看到&#xff0c;KEY_UP按键是高电平有效的&#xff0c;即当按下该按键时&#xff0c;GPIO读到高电平。 KEY0/1/2是低电平有效的&#xff0c;即当按下该按键时&#xff0c;G…

STM32F1笔记(三)UART/USART

UART&#xff1a;Universal Asynchronous Receiver/Transmitter&#xff08;通用异步收/发器&#xff09; USART&#xff1a;Universal Synchronous/Asynchronous Receiver/Transmitter&#xff08;通用同步/异步串行收/发器&#xff09; 从命名即可看出USART就是UART的基础上…

python安装界面翻译_python环境搭建

如果想要运行python需要有解释器和编辑器。 什么是解释器 解释器我们可以把它理解成翻译官&#xff0c;它是将我们写的python代码翻译成计算机能够懂得机器语言。 然后计算机收到解释器的命令来干活&#xff0c;最终再将结果反馈在解释器中。 解释器推荐使用anaconda3 什么是an…

进阶篇-用户界面:4.Android中常用组件

1.下拉菜单 在Web开发中&#xff0c;HTML提供了下拉列表的实现&#xff0c;就是使用<select>元素实现一个下拉列表&#xff0c;在其中每个下拉列表项使用<option>表示即可。这是在Web开发中一个必不可少的交互性组件&#xff0c;而在Android中的对应实现就是Spinne…