【利用python进行数据分析】chapter8:绘图和可视化

1.Figure和Subplot
matplotlib的图像都位于Figure对象中,可以用plt.figure创造一个对象

import matplotlib.pyplot as plt
fig = plt.figure()  #此时还是一个空白的窗口,如果不弹出这个窗口的话,可以使用
fig.show() # 手动弹出空白窗口,先不要关闭,否则下面的ax都不能画到fig上了
# 空白的fig是不可以绘画的,必须创建subplot才可以绘图
ax1 = fig.add_subplot(2,2,1)  #将fig分成2x2的网格,第一个网格是ax1
ax2 = fig.add_subplot(2,2,2)  
ax3 = fig.add_subplot(2,2,3)  
# 这时发出一条绘图命令,在最后一个用过的subplot上绘制图像,如果没有的话就创建一个。
from numpy.random import randn
plt.plot(randn(50).cumsum(),'k--')  #k--是一种线型选项,表示绘制黑色虚线图  
#写完这条语句后,就已经在fig中显示图像了,因此不用加plt.show()
# plt.show()  输入这条指令后也可以,但是输入后如果不关闭窗口,难以接着写指令,因此可以使用plt.ion() 可以显示图片,同时可以写代码
# 上面我们已经制定了三个subplot,这个返回的对象AxesSubplot对象,直接调用他们的实例方法就可以在制定的subplot上画图
_=ax1.hist(randn(100),bins=20,color='k',alpha=0.3)
ax2.scatter(np.arange(30),np.arange(30)+3*randn(30))#指定某个图像对象,进行绘制
# 因为一个一个地添加ax太麻烦了,可以使用一条语句添加多个
fig,axes=plt.subplots(2,3)  #添加两行三列地ax,括号内的参数是shape
axes #返回的是一个shape为(2,3)的ndarray
plt.subplots_adjust(left = None,bottom = None,right = None,top = None,wspace = None,hspace = None)  #一个调整不同subplot的间距的函数

#返回当前x轴的绘图范围
plt.xlim()  #返回当前的绘图范围
plt.xlim([-10,60])  #设定当前的绘图范围(如果不显示,把fig最大化看看)
# 修改刻度
fig = plt.figure()  #fig是不可以直接画图的,必须建一个subplot
ax = fig.add_subplot(1,1,1)
ax.plot(randn(50).cumsum())
ticks = ax.set_xticks([0,5,10,15])  #显示的刻度
labels = ax.set_xticklabels(['one','two','three','four'],rotation = 30,fontsize = 'small')  #不同刻度的标签
ax.set_title('my_first_image')  #给这个figure取一个标题
ax.set_xlabel('stage')   #x轴的标签

#添加图例
#比较简单的一种,绘制的时候直接添加label 不想要图例的话不添加label就行了
ax.plot(randn(1000).cumsum(),label = 'two')   
# ax.legend(loc = 'best')   #输入之后就可以显示当前已经画好的曲线的图例了,除了best外还有不同的选项

#添加注解
ax.text(0,0,'hello world',family = 'monospace',fontsize = 10) #可以添加文字  前两个参数为x和y,就是注解的位置,对应坐标轴
#注解有很多方式,如果想添加图形的话,得先创建一个块,作为容器
rect = plt.Rectangle((0.2,0.75),0.4,0.15,color = 'k',alpha = 0.3)  #创建个长方形
ax.add_patch(rect)

#保存图表
plt.savefig('a.svg')   #可以保存为不同的文件格式,svg、pdf、png都可以
plt.savefig('a.png',dpi = 400,bbox_inches = 'tight')  #dpi是分辨率,bbox表示的是是否剪除白边,tight表示保留最小的白边

2.pandas自带的绘图工具

import pandas as pd
from pandas import Series,DataFrame
s=Series(np.random.randn(10).cumsum(),index=np.arange(0,100,10))
s.plot()   #默认画的是线性图 series或者dataframe的索引会变成图像的刻度,如果不想的话,设置use_index = False
s.plot(kind = 'bar',use_index = False)   #选择画柱形图
#dataframe也是这样,但是每一列对应不同的图形
df.plot()
#散点图
plt.scatter(x,y)  #两个数据
pd.scatter_matrix(df)  #一个散点图矩阵

一个挺全,比这个好的多的博客地址:
利用Python进行数据分析——第8章绘图及可视化——学习笔记Python3 5.0.0

你可能感兴趣的:(python数据分析,python,数据分析)