matplotlib基础学习笔记--《利用python进行数据分析》

import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline   # juyter调用matplotlib.pyplot画图所需

关于 %matplotlib 详情。(https://www.jianshu.com/p/2dda5bb8ce7d)

本笔记所用图片都是通过plt.savefig()函数保存。

用plt.figure创建一个新的figure,再在上面add_subplot一个或多个subplot。

fig = plt.figure() #创建一个figuer
ax1 = fig.add_subplot(2,2,1)
ax2 = fig.add_subplot(2,2,2)
ax3 = fig.add_subplot(2,2,3)

matplotlib基础学习笔记--《利用python进行数据分析》
在已经创建好的subplot上面画图。

from numpy.random import randn
fig = plt.figure()
ax1 = fig.add_subplot(2,2,1)
ax2 = fig.add_subplot(2,2,2)
ax3 = fig.add_subplot(2,2,3)
plt.plot(randn(50).cumsum(),'k--') 
_ = ax1.hist(randn(100),bins=20,alpha=0.3)
ax2.scatter(np.arange(30),np.arange(30)+3*randn(30))

matplotlib基础学习笔记--《利用python进行数据分析》
使用plt.subplot(a,b)将图表划分,a表示横向划分为a个,b表示纵向划分为b个。

fig = plt.subplots(2,3)

matplotlib基础学习笔记--《利用python进行数据分析》
使用subplots_adjust方法修改其间距。

plt.subplots_adjust(wspace=0,hspace=0)

matplotlib基础学习笔记--《利用python进行数据分析》
设置figure大小,调整横纵坐标刻度,添加元素标签和注解,以及设置图表标题。

fig = plt.figure(figsize=(12,6))
ax = fig.add_subplot(1,1,1)
ax.set_xticks([0,250,500,750,1000])  # set_xticks([1,2,3])设置横坐标刻度
ax.set_yticks([-10,0,10,20,30])  # set_yticks([1,2,3])设置纵坐标刻度
ax.plot(randn(1000).cumsum(),label='one') #label=‘元素标签’
ax.set_xlabel('横坐标') #设置横坐标名字
ax.set_ylabel('纵坐标') #设置纵坐标名字
ax.set_title('标题') #设置图片标题
ax.legend(loc='best')
ax.text(250,5,'hello world!',family='monospace',fontsize=20)#添加注解

matplotlib基础学习笔记--《利用python进行数据分析》
具体实例:

from datetime import datetime
import pandas as pd
fig = plt.figure(figsize=(16,6))
ax1 = fig.add_subplot(1,1,1)
                                                                      # parse_dates 是读取时间格式转换
data = pd.read_csv('/Users/lc3/Desktop/pydata-book-2nd-edition/examples/spx.csv',index_col=0,parse_dates=True)
spx = data['SPX']
spx.plot(ax=ax1,style='g-')

crisis_data = [ (datetime(2007,10,11),'牛市高峰期'),
                (datetime(2008, 3,12),'贝尔斯登破产'),
                (datetime(2008, 9, 5),'雷曼破产')]

for date,label in crisis_data:
    ax1.annotate(label, xy=(date, spx.asof(date) + 50), # .asof() 参数为日期或时间
                xytext=(date, spx.asof(date) + 200),
                arrowprops=(dict(facecolor='black')),
                horizontalalignment='left', verticalalignment='top')
ax1.set_xlim(['10/1/2007','1/1/2009'])
ax1.set_ylim([1000,1800])

plt.savefig('analysis.png', dpi=800,bbox_inches='tight') #将图表保存至文件  dpi是分辨率f

matplotlib基础学习笔记--《利用python进行数据分析》
figure上面画形状。

fig = plt.figure(figsize=(8,8))
ax = fig.add_subplot(1,1,1)

#alpha	图表的填充不透明(0-1)
rect = plt.Rectangle((0.2,0.6),0.4,0.2,color='r',alpha=0.1)
circ = plt.Circle((0.2,0.2),0.2,color='g',alpha=0.3)
pgon = plt.Polygon([[1.0,0.05],[0.8,0.05],[0.8,0.4]],color='k',alpha=0.5)

ax.add_patch(rect)
ax.add_patch(circ)
ax.add_patch(pgon)

matplotlib基础学习笔记--《利用python进行数据分析》
通过plt.savefig()方法,在Web上提供动态生成图片的代码:

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