# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
from numpy.random import randn
import numpy as np
from io import StringIO
import pandas as pd
'''
#Create figure
fig = plt.figure()
#創建子圖subplot: 表示2X2,即4個子圖中的第1個圖,編號為1
#參數:nrows, ncols, sharex(所有子圖是否使用相同的x軸),sharey,subplot_kw(用于創建各subplot的關鍵字字典)
ax1 = fig.add_subplot(2,2,1)
ax2 = fig.add_subplot(2,2,2) #第二個子圖,編號為2
ax3 = fig.add_subplot(2,2,3) #第三個制圖,編號為3
plt.plot(randn(50).cumsum(), 'ko--') #在最后一個圖中畫線,k代表顏色,o表示每個數據點上加粗,強調實際的數據點,--代表樣式
ax1.hist(randn(1000), bins=20, color='k', alpha=0.3) #設置在ax1中畫柱狀圖
ax2.scatter(np.arange(30), np.arange(30) + 3 * randn(30)) #設置在ax2中畫散點圖
#比較便攜的方式, 直接返回figure和axes數組,2個figure,每個figure有3個subplot
#fig, axes = plt.subplots(2,3)
#修改圖外圍留下的邊距和子圖之間的邊距,前四個代表外圍邊距,wspace代表左右間距,hspace上下間距
plt.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=None)
#返回當前X軸繪圖范圍
print plt.xlim()
print ax1.get_xlim()
#設置x軸范圍
plt.xlim([0,10])
ax1.set_xlim([0,10])
#設置刻度與刻度標簽
ticks = ax1.set_xticks([0,5,10,15,20])
labels = ax1.set_xticklabels(['one','two','three','four','five'])
#設置圖標title和x軸名稱
ax1.set_title('XXXXXXX')
ax1.set_xlabel('XXX')
#添加圖例
ax1.plot(randn(1000).cumsum(), 'k--', label='one') #不需要圖例,則無需label參數
ax1.legend(loc='best') #'best'表示見圖里放在最不礙眼的地方
#添加注解,通過text,arrow和annotate等添加
ax1.text(100,30,'Hello',family='monospace', fontsize=10)
ax1.annotate( 'Hello', xy=(100,10), xytext=(100,30), arrowprops=dict(facecolor='black'),horizontalalignment='left', verticalalignment='top' )
plt.show() #顯示圖表
#保存圖表到文件
#plt.savefig('figPath.svg/pdf/png', dpi=400, bbox_inches='tight')
#保存圖表到IO
#buffer = StringIO()
#plt.savefig(buffer)
'''
'''
pandas 繪圖
'''
df = pd.DataFrame(np.random.randn(10,4).cumsum(0), columns=['A','B','C','D'],
index=np.arange(0,100,10))
#Series.plot參數
#label,ax,style='ko--',alpha
#kind='line/bar/barh/kde(密度圖,標準混合正態分布KDE)'
#loyg=True y軸使用對數標尺
#use_index=True 將對象的索引用作刻度標簽
#rot 旋轉刻度標簽
#xticks,yticks,x,y的刻度值
#xlim=[0,10] X軸的界限
#ylim=[0,10] Y軸的界限
#grid=True 網格線,默認打開
#DataFrame.plot參數
#subplots=True:將各個DataFrame列繪制到單獨的subplot中
#sharex,sharey
#figsize:表示圖新鮮大小的元祖
#title,legend,默認為True
#sort_columns:以字母表為順序繪制
#stacked=True:每行的值就會堆積
df.plot( kind='kde', stacked=True)
#plt.scatter(x,y)
#DataFrame創建散布圖矩陣,還支持在對角線上放置各變量的直方圖或密度圖
pd.scatter_matrix(df, diagonal='kde', color='k', alpha=0.3)
plt.show()