前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在Python里用ggplot2绘图

如何在Python里用ggplot2绘图

作者头像
AiTechYun
发布2019-06-15 16:25:56
3.5K0
发布2019-06-15 16:25:56
举报
文章被收录于专栏:ATYUN订阅号ATYUN订阅号

为了严格实现图形语法,ggplot2提供了一种非常直观和一致的方式来绘制数据。ggplot2的绘图方法不仅确保每个绘图包含特定的基本元素,而且在很大程度上简化了代码的可读性。

但是,如果您经常使用Python,那么实现图形语法将非常具有挑战性,因为在流行的绘图库(如matplotlib或seaborn)中缺少标准化语法。如果您仍然希望使用图形语法,那么Python包plotnine为您提供了另一种选择。

图形语法

如果你不熟悉图形语法,下面简单介绍一下:

图形语法的主要组成部分

可以看到,从数据开始,有几个组件组成了图形语法。在确定要可视化的数据之后,必须指定感兴趣的变量。例如,您可能希望在x轴上显示一个变量,在y轴上显示另一个变量。第三,您必须定义要使用哪种类型的几何对象(简称geom)。这可以是从条形图到散点图或任何其他现有绘图类型的任何内容。

前三个部分是强制性的。没有数据,就没有什么可以绘制的。如果没有轴的定义,也没有什么可以绘制的。最后,不定义几何对象,你只会看到一个空坐标系。构成图形语法的其余组件是可选的,可以实现它们来改进可视化。facet指的是子图的规范,也就是说,在单独的图中,将数据中的多个变量相邻地绘制在一起。统计转换主要指在图表中包含汇总统计信息,例如中位数或百分位数。坐标描述了不同的坐标系。最常用和默认的坐标系是笛卡尔坐标系。根据您想要绘制的数据的结构,使用较少的坐标系(如极坐标系统)可能提供一种更好的可视化数据的方法。最后,主题提供了各种选项来设计绘图的所有非数据元素,如图例、背景或注释。

虽然有很多可视化图形语法的方法,但我特别喜欢上面创建的语法,因为它意味着这些层的可加性,以及它们之间正在相互构建的事实。如果您曾经使用过ggplot2,那么您应该熟悉语法中的“+”,它表示上面描述的相同的思想。

plotnine

plotnine是一个Python包,允许您使用类似ggplot2的代码来实现图形语法。通过这样做,就像在ggplot2中一样,您可以将数据映射到构成可视化的可视对象。这使您能够提高代码的可读性和结构。虽然可以将matplotlib的样式设置为ggplot,但是不能像在ggplot2中那样在matplotlib中实现图形语法。

安装

在开始之前,您必须安装plotnine。像往常一样,有两种主要的选择:pip和conda。

代码语言:javascript
复制
1# Using pip
2pip install plotnine         
3
4# Using conda
5conda install -c conda-forge plotnine

作图

安装了plotnine之后,就可以开始使用图形语法进行绘图了。让我们从构建一个非常简单的绘图开始,只使用三个必需的组件:数据、美学和几何对象。

如您所见,语法与ggplot2非常相似。首先,我们指定数据源。在我们的例子中,我们使用的数据是经典的MPG数据集。接下来,我们定义变量“class”将显示在x轴上。最后,我们说我们要使用一个条形图,其中的条形图大小为20,以可视化我们的数据。让我们看看完整的代码和结果图:

代码语言:javascript
复制
 1import pandas as pd
 2import numpy as np
 3from pandas.api.types import CategoricalDtype
 4from plotnine import *
 5from plotnine.data import mpg
 6%matplotlib inline
 7
 8(ggplot(mpg)         # defining what data to use
 9 + aes(x='class')    # defining what variable to use
10 + geom_bar(size=20) # defining the type of plot to use
11)

上述代码将产生以下输出:

虽然这是一个良好的开端,但目前来看它还不是很好。让我们用图形语法的其他组成部分来美化我们的情节。

代码语言:javascript
复制
1(ggplot(mpg)
2 + aes(x='class')
3 + geom_bar(size=20)
4 + coord_flip()        # flipping the x- and y-axes
5 + labs(title='Number of Vehicles per Class', x='Vehicle Class', y='Number of Vehicles') # customizing labels
6)

例如,我们可以使用coord_flip()翻转坐标轴,并使用labs()自定义绘图和轴标题,以改进绘图。使用上面的代码块,我们的绘图如下所示:

绘制多维数据

除了基本的绘图之外,您几乎可以在ggplot2中做任何其他可以做的事情,比如绘制多维数据。如果你想可视化三个变量之间的关系,您可以将美学添加到另一个二维图中:

代码语言:javascript
复制
1(ggplot(mpg)
2 + aes(x='displ', y='hwy', color='class')
3 + geom_point()
4 + labs(title='Engine Displacement vs. Highway Miles per Gallon', x='Engine Displacement, in Litres', y='Highway Miles per Gallon')
5)

将颜色添加到美学中会提示plotnine在其y轴上使用disp(发动机排量,单位为升)在其x和hwy(高速公路英里/加仑)上显示二维绘图,并根据变量类对数据进行着色。我们还将几何对象切换到geom_point(),这将为我们提供一个散点图,而不是条形图。让我们来看看会是什么样子:

结论

如您所见,plotnine为您提供了利用Python中图形语法的能力。这提高了代码的可读性,并允许您将部分数据具体映射到可视对象。如果你已经熟悉ggplot2,那么你就不需要学习任何新的东西来掌握plotnine。但是如果你没有,就要行动起来,赶快去学吧~

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ATYUN订阅号 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 图形语法
  • plotnine
  • 结论
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档