ggplot2设置坐标轴范围_Python语言plotnine VS R语言ggplot2

ggplot2包是由Hadley Wickham在2005年创造。相对于R中的基础可视化包,是基于图形语法的绘图包,一经提出就迅速受到广大R语言使用者的喜爱。ggplot2包利用图层叠加的绘图方式,往图像上不断的添加图形元素、注释、统计结果等内容。

plotnine库可以看作是在Python中对ggplot2包的一种实现,方便Python对数据可视化的应用。

本文章会分别介绍在R和Python中,如何使用相关的库进行数据可视化分析。对比分析两个库的使用情况。

1. ggplot2plotnine数据可视化初探

在R语言中的ggplot2包数据可视化流程程序如下:

## 统一设置ggplot2默认的绘图风格library(ggplot2)theme_set(theme_bw(base_family = "STKaiti"))library(ggplot2)## 导入包data("mpg")     ## 加载ggplot2包中自带的数据集## ggplot2数据可视化流程## 初始化绘图图层,并指定绘图的数据和坐标系X,Y轴使用的变量p1   ## 添加绘图使用的主题和相关设置图层  theme_minimal(base_family = "STKaiti",base_size = 12)+  ## 添加绘制图像的类型图层,并指定是否根据不同的种类以不同样式显示  geom_point(aes(colour = drv,shape = drv),size = 2)+  ## 添加新的平滑曲线图层,使用广义回归模型拟合  geom_smooth(aes(colour = drv),method = "glm")+  ## 设置图像的标题和坐标轴的标签  labs(x = "发动机排量",y = "油耗",title = "mpg数据集")+  ## 添加主题图层对图像进一步调整  theme(plot.title = element_text(hjust = 0.5), # 调整标题位置        legend.position = c(0.9,0.8), # 调整图例位置        legend.title = element_text(size=10))+ #调整图例字体大小  ## 对坐标轴的内容进行调整  scale_x_continuous(labels = function(x) paste(x,"升",sep = ""))+  ## 对图例中的颜色映射和名称进行调整  scale_color_brewer("驱动方式",palette = "Set1")+  scale_shape_discrete("驱动方式")## 输出图像p1p1

运行程序后可获得如下所示的可视化图像:

3bbd68dd2fa87da43fa6dd308e90a812.png

图1 R语言ggplot2数据可视化图像1

针对上面的图像,在Python中可使用下面的程序进行数据可视化:
## 显示高清图%config InlineBackend.figure_format = 'retina'## 导入相关库和模块import pandas as pdimport numpy as npfrom plotnine import *from plotnine.data import mpgimport matplotlib.pyplot as pltfrom matplotlib import gridspectheme_set(theme_bw(base_family = "STKaiti"))## plotnine数据可视化流程## 初始化绘图图层,并指定绘图的数据和坐标系X,Y轴使用的变量p1 = (ggplot(mpg,aes(x = "displ",y = "cty"))      ## 添加绘图使用的主题和相关设置图层      +theme_minimal(base_family="STKaiti",base_size = 12)      ## 添加绘制图像的类型图层,并指定是否根据不同的种类以不同样式显示      +geom_point(aes(colour = "drv",shape = "drv"),size=2)      ## 添加新的平滑曲线图层,使用广义回归模型拟合      +geom_smooth(aes(colour = "drv"),method = "glm")      ## 设置图像的标题和坐标轴的标签      +labs(x = "发动机排量",y = "油耗",title = "mpg数据集")      ## 添加主题图层对图像进一步调整      +theme(plot_title = element_text(hjust = 0.5), # 调整标题位置             legend_position = (0.9,0.8),            # 调整图例位置             legend_title = element_text(size=10)) #调整图例字体大小      ## 对坐标轴的内容进行调整      +scale_x_continuous(breaks = (2,3,4,5,6,7),                          labels = [str(x)+"升" for x in [2,3,4,5,6,7]])      ## 对图例中的颜色映射和名称进行调整      +scale_color_brewer(name = "驱动方式",palette = "Set1",type="qual")      +scale_shape_discrete(name = "驱动方式")     )p1
运行上面程序后可获的如下所示的图像。

046d56b0bd06678a39774e66a9a02afa.png

图2 Python中plotnine库数据可视化图像1

两者绘图程序的主要差异为:某些参数名称有差异,Python中使用的数据特征需要使用“”包裹,一些参数的取值可以使用数组或列表进行替换。

2. ggplot2plotnine中常用的数据可视化函数

R中的ggplot2库的函数可视化程序如下:
# 使用不同的几何对象绘制不同的图像,导入会使用到的相关包library(ggplot2);library(gridExtra);library(RColorBrewer);## 使用q-q图检测数据的分布p1   geom_qq(colour = "blue")+geom_qq_line(colour = "red")+  ggtitle("geom_qq+geom_qq_line")## 可视化添加了误差线的条形图,数据准备mpgclass colnames(mpgclass) ## 误差线的上下界mpgclass$ymin mpgclass$ymax ## 可视化图像p2   geom_bar(stat = "identity",fill = "red",alpha = 0.6)+  geom_errorbar(aes(ymin = ymin,ymax=ymax),width=0.5,colour = "blue")+  ggtitle("geom_bar+geom_errorbar")+labs(x = "")+coord_flip()## 可视化小提琴图和抖动的散点图p3   geom_violin(weight = 0.5,alpha = 0.5)+geom_jitter(width = 0.2)+  theme(legend.position = "none")+labs(x = "驱动方式")+  ggtitle("geom_violin+geom_jitter")## 可视化直方图分析变量的分布p4   geom_histogram(aes(y = ..density..),position = "identity",                 binwidth = 0.25,fill = "red",alpha = 0.5)+  geom_density(alpha = 0.2,colour = "blue")+  ggtitle("geom_histogram+geom_density")## 二维封箱的热力图p5   geom_bin2d(bins = 20)+geom_density2d(colour = "red")+  theme(legend.position = "none")+ggtitle("geom_bin2d+geom_density2d")## 面积填充图可视化## 生成数据huron p6   geom_ribbon(aes(ymin = level - 1, ymax = level + 1), fill = "lightblue") +  geom_line(aes(y = level),color = "red")+ggtitle("geom_ribbon+geom_line")## 将6幅图像重新布局grid.arrange(p1,p2,p3,p4,p5,p6,nrow = 2)

49450748f1b7156f98e2c61d7e3210dd.png

图3 R语言ggplot2数据可视化图像2

Python中plotnine库常用可视化函数的使用如下所示:
## 使用q-q图检测数据的分布p1 = (ggplot(mpg,aes(sample="displ"))      +geom_qq(colour = "blue")+geom_qq_line(colour = "red")      +ggtitle("geom_qq+geom_qq_line")     )## 可视化添加了误差线的条形图,数据准备mpgclass = pd.value_counts(mpg["class"]).reset_index()mpgclass.columns=["car_type","Freq"]## 误差线的上下界mpgclass["ymin"] = mpgclass["Freq"] - [1,5,4,2,3,3,2]mpgclass["ymax"] = mpgclass["Freq"] + [1,5,4,2,3,3,6]## 可视化图像p2 = (ggplot(mpgclass,aes(x = "car_type" ,y = "Freq"))      +geom_bar(stat = "identity",fill = "red",alpha = 0.6)      +geom_errorbar(aes(ymin = "ymin",ymax="ymax"),width=0.5,colour = "blue")      +ggtitle("geom_bar+geom_errorbar")+labs(x = "")+coord_flip()     )## 可视化小提琴图和抖动的散点图p3 = (ggplot(mpg,aes(x="drv",y = "displ",group = "drv",fill = "drv"))      +geom_violin(weight = 0.5,alpha = 0.5)+geom_jitter(width = 0.2)      +theme(legend_position = "none")+labs(x = "驱动方式")      +ggtitle("geom_violin+geom_jitter")     )## 可视化直方图分析变量的分布p4 = (ggplot(mpg,aes("displ"))+      geom_histogram(aes(y = "stat(density)"),position = "identity",                     binwidth = 0.25,fill = "red",alpha = 0.5)      +geom_density(alpha = 0.2,colour = "blue")      +ggtitle("geom_histogram+geom_density")     )## 二维封箱的热力图p5 = (ggplot(mpg,aes(x="displ",y = "cty"))      +geom_bin2d(bins = 20)+geom_density_2d(colour = "red")      +theme(legend_position = "none")+ggtitle("geom_bin2d+geom_density2d")     )## 面积填充图可视化## 生成数据np.random.seed(12)huron = pd.DataFrame(data = {"year": np.arange(1875,1973), "level": 100*np.random.rand((1973-1875))})huron["ymin"] = huron["level"]-20huron["ymax"] = huron["level"]+20p6 = (ggplot(huron, aes("year"))      +geom_ribbon(aes(ymin = "ymin", ymax = "ymax"), fill = "lightblue")      +geom_line(aes(y = "level"),color = "red")+ggtitle("geom_ribbon+geom_line")     )## 将多个图像重新分配窗口可视化fig = (ggplot()+geom_blank(data=mpg)+theme_void()).draw()gs = gridspec.GridSpec(2,3)  ## 初始化多个窗口ax1 = fig.add_subplot(gs[0,0])ax2 = fig.add_subplot(gs[0,1])ax3 = fig.add_subplot(gs[0,2])ax4 = fig.add_subplot(gs[1,0])ax5 = fig.add_subplot(gs[1,1])ax6 = fig.add_subplot(gs[1,2])## 为多个窗口绘图_ = p1._draw_using_figure(fig,[ax1])_ = p2._draw_using_figure(fig,[ax2])_ = p3._draw_using_figure(fig,[ax3])_ = p4._draw_using_figure(fig,[ax4])_ = p5._draw_using_figure(fig,[ax5])_ = p6._draw_using_figure(fig,[ax6])plt.tight_layout()plt.show()

242e3a196da8c3b9cb9c5c45023d53ed.png

图4 Python中plotnine库数据可视化图像2

3. ggplot2plotnine中数据分面可视化

R语言中ggplot2的数据分面程序示例如下:
## 网格分面facet_grid()的使用,scales = "free_x"固定Y轴范围,灵活设置X轴ggplot(data = mpg,aes(x = displ,y = cty,colour = drv,shape = drv))+  geom_point(show.legend = FALSE)+facet_grid(year~drv,scales = "free_x")+  labs(x = "发动机排量",y = "油耗",title = "mpg数据集")

af47343452cf2aadd78df926fbe6d05c.png

图5 R语言ggplot2数据可视化图像3

Python语言中plotnine库的数据分面程序示例如下:
## 网格分面facet_grid()的使用,scales = "free_x"固定Y轴范围,灵活设置X轴p1 = (ggplot(data = mpg, mapping=aes(x = "displ",y = "cty",colour = "drv",shape = "drv"))      +geom_point(show_legend = False)+facet_grid("year ~ drv",scales = "free_x")      +labs(x = "发动机排量",y = "油耗",title = "mpg数据集")     )p1

d5c21ad1462792ff5444d426c016804a.png

图6 Python中plotnine库数据可视化图像3

经过对比可以发现plotnine库的语法和ggplot2的语法很相似,而且得到的图像也几乎完全一致。

关注我们:

99051439d956ee0771145504f31d5772.png

加入我们的QQ群

2ba3755736d229c3227d0063ca9f9e8c.png

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值