数据分析(3)-matplotlib

绘图与可视化-总体描述

画图实例:Python科学绘图实例附代码
基本图表元素
1,X轴与Y轴
2,X轴和y轴刻度
3,X轴和y轴刻度标签
4,绘图区域
创建窗口

plt.figure();         # 只能画出空窗口figsize 有一些重要的选项,特别是figsize,规定的是图片保存到磁盘时具有一定大小的纵横比。plt.gcf()#可得到当前Figure的引用
import matplotlib.pyplot as plt 
fig=plt.figure()
ax1=fig.add_subplot(2,2,1)   #在上面化直方图,散点图
_ = ax1.hist(np.random.randn(100),bins = 20,color = 'k',alpha = 0.3)
ax1.scatter(np.arange(30),np.arange(30) + 3 * np.random.randn(30))
plt.subplot();  #针对figure()更便捷;创建一个新的Figure,并返回一个含有已创建的subplot对象的NumPy数组 
import numpy as np
import matplotlib.pyplot as plt
fig,axes = plt.subplots(2,3) #里面要有数字
print fig                    #Figure(640x480)
print axes                   #是个2x3的数组
axes[0][0].hist(np.random.randn(100),bins = 20,color = 'k',alpha = 0.3)
plt.show()
#这是非常实用的,因为可以轻松地对axes数组进行索引,就好像一个是一个二维数组一样,例如axes[0,1].还可以通过sharex和sharey指定subplot具有相同的x轴和y轴。在比较相同范围的数据时,这是非常实用的,否则matplotlib会自动缩放各图表的界限。

在窗口上画图
画图里面的数据一定要是数组array,矩阵matrix不能搞成一维

#直接用plt画图(用最后一个有用的subplot,否则自动创建一个)/也可以在ax1上画
plt.plot()     #画线型图像或ax.plot()
plt.hist()     #直方图或ax.plot()
plt.scatter()  #散点图或ax.plot()

画图的数据应该为:array([ 11.321997 11.810993 8.904943])如果是矩阵或者不是一维的则转换

a1=dataMat[:,0].flatten().A[0]

图像显示

plt.show()        #将前面的窗口显示

图形的保存
将图标保存到文件;savefig函数可以保存图形文件,不同的扩展名保存为不同的格式

plt.savefig('figpath.svg')      #如果使用.PDF,就会得到一个PDF文件

注意下面的dpi(每英寸点数)和bbox_inches(可以剪除当前图标周围的空白部分)(确实有效)

plt.savefig('pic.jpg',dpi = 100,bbox_inches = 'tight')

不一定save到文件中,也可以写入任何文件型对象,比如StringIO

from io import BytesIO
buffer = StringIO()
plt.savefig(buffer)
plot_data = buffer.getvalue()

这对Web上提供动态生成的图片是很实用的
颜色、标记和线型

plt.figure()
plt.plot(x,y,linestyle='--',color='g')
plt.plot(randn(30).cumsum(), 'ko--')
plt.plot(randn(30).cumsum(),color='k',linestyle='dashed',marker='o')
plt.close('all')
data = randn(30).cumsum()
plt.plot(data, 'k--', label='Default')
plt.plot(data, 'k-', drawstyle='steps-post', label='steps-post')
plt.legend(loc='best')
窗口设置

标题、轴标签、刻度,刻度标签,图例
最简单的方法就是使用set_xticks前者告诉matplotlib将刻度放在数据范围中的哪些位置,默认情况下,这些位置就是刻度标签。但是可以使用set_xticklabels将任何其他的值用作标签

ticks = ax.set_xticks([0,250,500,700,900,1000])                                         #将x轴的坐标为0,250,500,700,900,1000
labels = ax.set_xticklabels(['a','b','c','d','e','f'],rotation = 30,fontsize = 'small') #rotation是规定a,...,f的旋转角度
ax.set_title('My first matplotlib plot')            #为标题设置名称
ax.set_xlabel('Stages')                             #可以为x轴设置名称
ax.set_ylabel('Value')                              #可以为y轴设置名称

图例(legend)是另一种用于标识图表元素的重要工具(有个标识,哪条线是什么图),最简单是用label参数;后面必须有ax.legend(loc = ‘best’)#告诉图例放在哪?

ax.plot(npr.randn(1000).cumsum(),'k',label = 'one')
ax.plot(npr.randn(1000).cumsum(),'k--',label = 'two')
ax.plot(npr.randn(1000).cumsum(),'k.',label = 'three')
ax.legend(loc = 'best')#告诉图例放在哪?
ax.legend(loc = 'upper right') 【放在右上角】//ax.legend(loc='best')

添加注释
注释可以通过text、arrow和annotate等函数添加。text可以将文本绘制在图表的指定坐标(x,y)还可以加上自定义格式

ax.text(x,y,'hello world!',family='monospace',fontsize=10)

下面代码需要测试?????????????????

# -*- encoding: UTF-8 -*-
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import numpy.random as npr
from datetime import datetime
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
data = pd.read_csv('E:\\spx.csv',index_col = 0,parse_dates = True)
spx = data['SPX']
spx.plot(ax = ax,style = 'k-')
crisis_data = [
(datetime(2007,10,11),'Peak of bull market'),
(datetime(2008,3,12),'Bear Stearns Fails'),
(datetime(2008,9,15),'Lehman Bankruptcy')
]
for date,label in crisis_data:
    ax.annotate(label,xy = (date,spx.asof(date) + 50),
        xytext = (date,spx.asof(date) + 200),
        arrowprops = dict(facecolor = 'black'),
        horizontalalignment = 'left',verticalalignment = 'top')
ax.set_xlim(['1/1/2007','1/1/2011'])
ax.set_ylim([600,1800])
ax.set_title('Important dates in 2008-2009 finacial crisis')
plt.show()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值