【R和Python对比】matplotlib和ggplot(一)

来源:互联网 发布:123d make mac 编辑:程序博客网 时间:2024/05/03 15:30

接下来几天对比下R和py的作图功能。

R的ggplot可以说是各方面都很优秀的作图包,具有优雅的语法结构、多参数可变的调整和丰富的作图模式,然而ggplot学习起来较为复杂,而且在画图之前需要做一些繁琐的数据整形和处理工作,因为ggplot只接受长格式的数据,所以意味着需要把宽格式变长。

同样的,python的画图工具也有这个问题,不过更多的是把长数据变成宽数据,这两个画图还真的是配呢。

py的主要工具就是matplotlib,和pandas可以结合使用。

首先需要导入包:

import matplotlib.pyplot as plt

其实matplotlib单独使用的时候,也就是单独设置x,y可以理解为R中的基础绘图包,这时候,横轴和纵轴不一定需要再一个数据框中,比如:

fig=plt.figure() #画布ax=fig.add_subplot(1,1,1) #分面,如果不分就是1ax.plot(np.random.randn(1000).cumsum()) #散点图

看这段代码,第一个是新建画布,类似于R中plot新建一个空的,然后第二个类似于R中的mfrow,比如新建个四个图:

R中是

par(mfrow=c(2,2))

py中是

fig.axe=plt.subplots(2,2)

不过py好在不一定要按照顺序,比如我选择在右下角的地方画图:

fig,axe=plt.subplots(2,2)axe[1,1].plot(np.random.randn(1000).cumsum()) #散点图

这里写图片描述

下面就是一般的plot调参:

ax.set_xticks([0,250,500,750,1000]) #设置坐标轴标签ax.set_yticks([-10,0,10,20,30,40]) #设置坐标轴标签ax.set_xlabel('-x轴') #xlabelax.set_ylabel('y轴') #ylabelax.set_title('标题') #titleax.legend('图例',loc='beat') #图例ax.text(0,-10,'注解') #注解ax.axis([xmin,xmax,ymin,ymax]) #坐标轴limit

感觉比R的plot更加直观和简单。

下面针对数据框的数据进行画图,这块就对比ggplot了,还是iris数据集,如果R中针对’Sepal.Length’和’Sepal.Width’做散点图:

ggplot(data=iris)+geom_point(aes(x=iris$Speal.Length,y=iris$Sepal.Width,colour='black')+xlim(

而py中:

iris.loc[:,{'Sepal.Length','Sepal.Width'}].plot(kind='scatter',                                                                         x='Sepal.Length',                                                y='Sepal.Width',                                                color='k',                                                s=5,                                                title='Scatter')

先选择这两列,然后选择kind=scatter,类似每次画图的时候ggplot都要加上geom_?来判定是什么图形一样。

当然也可以用基础画图方式来看:

plt.plot(iris['Sepal.Length'],         iris['Sepal.Width'],         'ko',         ms=2,         label='S')plt.xlabel('Sepal.Length')plt.ylabel('Sepal.Width')plt.title('Iris_point')

但是就会比较麻烦。

同理,画一个线图:

iris['Sepal.Length'].plot(linewidth=0.5,                          alpha=0.9,                          color='k',                          ls='dashed',                          title='Sepal.Length')

这里写图片描述

大概的逻辑就是取需要画图的列,然后应用plot函数,然后在后面kind中选择具体的图形,下一章测试下其他图形

原创粉丝点击