ggplot2与python总结

R里面的ggplot2画图很好看,但是我对python更熟悉,有没有能再python中画出ggplot2的图呢,是可以的

https://towardsdatascience.com/practical-data-visualization-guide-seaborn-vs-ggplot2-9747d9153ade

python seaborn

import numpy as np
import pandas as pd
import seaborn as sns
sns.set(style='darkgrid')
titanic = pd.read_csv("../../DL学习/小数据集/train.csv")
titanic.drop(['PassengerId', 'Name', 'Ticket'], 
             axis=1, inplace=True)
titanic.head()

在这里插入图片描述在这里插入图片描述

sns.displot(data=titanic, x="Age", col="Survived", kind="hist")

在这里插入图片描述

titanic = titanic[titanic.Fare < 300]
sns.relplot(data=titanic, x="Age", y="Fare", kind="scatter",
            hue="Survived", row="Sex", col="Pclass",
            height=4)

在这里插入图片描述

R ggplot2

library(ggplot2)
library(data.table)
titanic <- fread("/Users/xiaokangyu/Desktop/DL学习/小数据集/train.csv")
titanic[, c("PassengerId", "Name", "Ticket"):=NULL]
print(head(titanic))
titanic$Survived=as.factor(titanic$Survived) # 需要先转化成factor
print(ggplot(data = titanic) + 
     geom_point(mapping = aes(x = Age,  y = Fare, color =  
                                   Survived)))
 t <- ggplot(titanic, aes(Age)) + 
      geom_histogram(bins=10, fill='lightblue')
print( t + facet_grid(cols=vars(Survived)))


titanic <- titanic[Fare < 300]
t <- ggplot(titanic, aes(x=Age, y=Fare, color=Survived)) + geom_point()
print(t + facet_grid(cols=vars(Pclass), rows=vars(Sex)))

结果如下
在这里插入图片描述在这里插入图片描述在这里插入图片描述
此外我发现了一个好东西,已经有人做好了python的库,很完美的复现ggplot的结果了,

安装

https://plotnine.readthedocs.io/en/stable/installation.html

pip install 'plotnine[all]'

plotnine使用案例

import pandas as pd
from plotnine import *
from plotnine.data import mtcars
%matplotlib inline

在这里插入图片描述

import numpy as np
import pandas as pd
import seaborn as sns
sns.set(style='darkgrid')
titanic = pd.read_csv("../../DL学习/小数据集/train.csv")
titanic.drop(['PassengerId', 'Name', 'Ticket'], 
             axis=1, inplace=True)
titanic.head()
((ggplot(data = titanic) + 
     geom_point(mapping = aes(x = 'Age',  y = 'Fare', color =  
                                   'Survived')))
)

在这里插入图片描述可以看到这个结果和R中的结果是一模一样的,而且代码格式可以直接复制过来

我今天又找到一种在python中画ggplot的图
http://r-statistics.co/Top50-Ggplot2-Visualizations-MasterList-R-Code.html

即在jupyter中执行这个操作

%load_ext rpy2.ipython
%%R
# install.packages("ggplot2")
# load package and data
options(scipen=999)  # turn-off scientific notation like 1e+48
library(ggplot2)
theme_set(theme_bw())  # pre-set the bw theme.
data("midwest", package = "ggplot2")
# midwest <- read.csv("http://goo.gl/G1K41K")  # bkup data source

# Scatterplot
gg <- ggplot(midwest, aes(x=area, y=poptotal)) + 
  geom_point(aes(col=state, size=popdensity)) + 
  geom_smooth(method="loess", se=F) + 
  xlim(c(0, 0.1)) + 
  ylim(c(0, 500000)) + 
  labs(subtitle="Area Vs Population", 
       y="Population", 
       x="Area", 
       title="Scatterplot", 
       caption = "Source: midwest")

plot(gg)

结果如下
在这里插入图片描述在这里插入图片描述

补充内容

今天我又学习了一个这个plotnine这个包,发现这个是真的好用,但是其中python中ggplot画图还是有些需要主要注意的地方,这里总结一下
首先我发现这个库对scipy1.8.1是不兼容的,应该得保证scipy是1.4.1或者1.5.1·,否则会报错

import pandas as pd
from plotnine import *
from plotnine.data import mtcars
%matplotlib inline

ToothGrowth=pd.read_csv("/Users/xiaokangyu/Desktop/dataset/other/ToothGrowth/ToothGrowth.csv",index_col=0,header=0)
#ToothGrowth
ToothGrowth["dose"]=ToothGrowth["dose"].astype("category")
# 注意点1
# 如果在R中是factor类型的数据
# 那么在python中需要转换成category类型,否则作图还是和R不一样的,需要注意

# 注意点2
# 在R中写变量的名称是不需要带引号的,而在python中是必须带的,所以还是不能把R中的代码直接复制过来运行,而是需要
# 稍微修改一下

在这里插入图片描述如果不提前转换成category类型,画的图只有一个箱线,而不是三个
在这里插入图片描述我之前一直以为python中的ggplot一定得加入括号,其实也是没有必要的

所以有了这个,我测试了ggplot的加语法,发现和R中的ggplot2保持一致
在这里插入图片描述同理画多组箱线图
在这里插入图片描述保存结果

ggsave(p,file="./py_ggplot.png")

这里虽然我包成成png,但是最终的结果还是pdf,不过影响不大

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值