接下来几天对比下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) #分面,如果不分就是1
ax.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轴') #xlabel
ax.set_ylabel('y轴') #ylabel
ax.set_title('标题') #title
ax.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中选择具体的图形,下一章测试下其他图形