Python可视化库——plotnine学习和使用
plotnine简介
plotnine学习背景
作为一名python的初学者,做数据分析的时候学的也都是python自带的matplotlib和seaborn,后来公司的一个学习R语言的同事拿R语言的ggplot2作图,做的又快又好,他给我推荐了python的plotnine库,使用方式与R语言很相似,做出来的图也很好看,我试了一下,果真如此。然后趁有时间就整理一下plotnine的绘图,如果有什么不严谨或者不对的地方请大家指出来,谢谢。如果有更多想学的可以点击:plotnine官网
plotnine的优点
- 代码简洁,易学习看懂
- 绘制的图流畅大方,不需要很多的代码就可以绘制很不错的图
plotnine的使用
plotnine安装导入
我们可以用pip直接安装
pip install plotnine
导入plotnine库
from plotnine import *
基本和常用语法(目前我用到过的)
基本语法
创建一个图形对象
基本语法 | Value |
---|---|
ggplot | 创建对象 |
aes | 数据中的变量到图形成分的映射 |
几何对象geom
几何对象geom负责每个数据点的可视化,geom_后面的部分决定几何对象的类型,每个图至少添加一个几何对象,不同的视觉对象由aes控制映射
基本语法 | Value |
---|---|
geom_area | 面积图 |
geom_bar | 条形图(饼图) |
geom_blank | 空的几何对象,什么也不画 |
geom_histogram | 直方图 |
geom_line | 线图 |
geom_point | 点图 |
geom_map | 地图 |
geom_boxplot | 箱线图 |
geom_violin | 小提琴图 |
统计变化stat
统计变换再数据被提取出来之前对数据进行聚合和其他计算,用stat_确定对数据进行的计算类型,不同类型的计算统计产生不同的图形结果
基本语法 | Value |
---|---|
stat_abline | 添加线条,用斜率和截距表示 |
stat_bin | 分割数据,然后绘制直方图 |
stat_identity | 绘制原始数据,不进行统计变化 |
标度函数scale
标度函数scale是对数据图形的调整,通过scale_这样的函数将获取的数据进行调整以改变图形的长度、颜色、大小和形状。
基本语法 | Value |
---|---|
scale_x_date | x轴标签是日期 |
scale_x_datetime | x轴标签是时间 |
scale_y_date | y轴标签是日期 |
scale_y_datetime | y轴标签是时间 |
xlim | x轴范围 |
ylim | y轴范围 |
标签Labels
这个就不用解释了吧
基本语法 | Value |
---|---|
labs | 设置所有的标签和标题 |
xlab | 设置x轴标签 |
ylab | 设置y轴标签 |
ggtitle | 创建图表标题 |
完整公式
- 一个括号
( - 基本公式:用ggplot创建图形,geom_创建几何对象
ggplot(df,aes())+geom_()) - 调整公式
+scale+theme······ - 最后一个括号
)
例如:
绘制图像(最基本的图像)
条形图
我们先对比一下
plotnine绘图
matplotlib绘图
这样就可以看出plotnine绘图确实比matplotlib绘图要好看多了,而且简洁大气
我们先先导入我们需要的库
from plotnine import *
import pandas as pd
我们导入数据,我这边是已经处理过了的数据,为方便大家理解,我先把原始数据转为字典,然后直接转为DataFrame
median_age_dict={
'Country': ['New Zealand','Spain','Ireland','Israel','Denmark','Norway','Netherlands','Australia','Italy','Sweden'],
'Age': [39.0, 37.0, 35.0, 34.0, 34.0, 34.0, 34.0, 34.0, 34.0, 34.0]
}
median_age=pd.DataFrame(median_age_dict)
我们看一下数据
然后我们开始绘图
(
ggplot(median_age,aes(x='Country',y='Age'))#创建图象,传入数据来源和映射
+ geom_bar()#建立几何对象,画直方图
)
这时候会报错,因为直方图需要设置数据统计方式,需要用stat这个参数在geom_bar里面传入统计方式,统计方式为identity,即用数据表原有的数据进行统计
(
ggplot(median_age,aes(x='Country',y='Age'))#创建图象,传入数据来源和映射
+ geom_bar(stat='identity')#建立几何对象,画直方图
)
我们可以看到这时候已经绘制出一幅纵向直方图,我们想要得到我们需要的图,我们要进行以下的处理
- 不同国家画不同的颜色
- 每一个国家添加数据标签
- 将纵向直方图转置变为横向直方图
- x轴没有按照顺序排序,需要让它按照数据顺序排序
- 每一个条形图的粗细需要调整
- **添加图表标题 **
我们一个一个来
将不同国家填充不同的颜色在映射里面添加fill参数可以将数据以颜色区分
(
ggplot(median_age,aes(x='Country',y='Age',fill='Country'))#创建图象,传入数据来源和映射
+ geom_bar(stat='identity')#建立几何对象,画直方图
)
这样我们就将不同的国家都填充上了不同的颜色
然后我们给他添加数据标签,添加数据标签需要用geom_text文本来绘图,同样需要添加映射
(
ggplot(median_age,aes(x='Country',y='Age',fill='Country'))#创建图象,传入数据来源和映射
+ geom_bar(stat='identity')#建立几何对象,画直方图
+ geom_text(aes(x='Country',y='Age',label='Age'))#添加数据标签
)
但是这个数据标签的位置不太好,我们要让它往上移一下,利用nudge_y参数
(
ggplot(median_age,aes(x='Country',y='Age',fill='Country'))#创建图象,传入数据来源和映射
+ geom_bar(stat='identity')#建立几何对象,画直方图
+ geom_text(aes(x='Country',y='Age',label=