matplotlib學習筆記
data-visualization
1.matplotlib學習之基本使用
1.1figure學習
import? matplotlib.pyplot as plt?????????? #導入包
import numpy as np
?
x=np.linspace(-3,3,50)?????????????????????????? #產生-3到3之間50個點
?
y1=2*x+1?????????????????????????????????????????????? #定義函數(shù)
y2=x**2
?
#同時顯示多張圖時,在每一句 plt.plot(x,y) 前邊添加 plt.figure() ,就可以畫出多張圖
plt.figure()
plt.plot(x,y1) ??????????????????????????????????????? # 繪制直線
plt.figure(num=3,figsize=(8,5)) 如果上述figure函數(shù)的參數(shù)為空,即plt.figure(),那么圖片名字默認為1,2,3...指定了num=3 or 其他數(shù)值后,圖片編號為指定的編號;figsize,圖片長和寬。
?
# 紅色虛線直線寬度默認1.0(線的樣式)
plt.plot(x,y1,color='red',linewidth=1.0,linestyle='--')
1.2設置坐標軸
plt.xlim((-1,2))????????????????? #設置x軸范圍
plt.ylim((-2,3))????????????????? #設置軸y范圍
?
#設置坐標軸含義, 注:英文直接寫,中文需要后面加上fontproperties屬性
plt.xlabel('價格',fontproperties='SimHei')
設置對應坐標用漢字或英文表示,后面的屬性fontproperties表示中文可見,不亂碼,內部英文$$表示將英文括起來,r表示正則匹配,通過這個方式將其變?yōu)楹每吹淖煮w。如果要顯示特殊字符,比如阿爾法,則用轉意符\alpha,前面的\ 表示空格轉意.
?
new_ticks=np.linspace(-1,2,5) ??????????? # 設置x軸刻度
plt.xticks(new_ticks)
?
設置邊框/坐標軸
ax=plt.gca()??????????????? ??????????????????????????? #gca=get current axis/獲取當前軸線
ax.spines['right'].set_color('none')? ????? #spines就是脊梁,即四個邊框
ax.spines['top'].set_color('none')?????????? #取消右邊與上邊軸
?
matlibplot并沒有設置默認的x軸與y軸方向,下面就開始設置默認軸
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
?
實現(xiàn)將(0,-1)設為坐標原點
ax.spines['bottom'].set_position(('data',-1))
ax.spines['left'].set_position(('data',0))
1.3圖例
l1,=plt.plot(x,y2)
plt.legend(handles=[l1,l2],prop={'family':'SimHei','size':15},loc='lower right',labels=['直線','曲線'])
prop={'family':'SimHei','size':15}:顯示中文
legend(hadles=[,,],labels=[,,],loc='best/upper right/upper left/.../lower right')
handles就是你給他添加legend的線,如果要用handles,則前面的plt.plot,必須用l1,形式(不要忘記逗號)
此處labels會覆蓋上述的plt.plot()的label
loc默認是best,給你放在一個合適的位置上,如果你拉伸彈框,位置會跟著變,自動放置合適位置
?
1.4 Annotation標注
繪制特定散點
x0=1
y0=2*x0+1
?
# plot散點圖,上述plt.plot(x,y)變?yōu)?/span>plt.scatter(x,y)繪制出來就是散點圖
# s代表大小,b代表blue
plt.scatter(x0,y0,s=50,color='b')
?
# 繪制(x0,y0)垂直于x軸的線
# k--表示黑色虛線,k代表黑色,--表示虛線,lw表示線寬
plt.plot([x0,x0],[0,y0],'k--',lw=2.5)
?
#xy就是需要進行注釋的點的橫縱坐標;
#xycoords = 'data'說明的是要注釋點的xy的坐標是以橫縱坐標軸為基準的;
#xytext=(+30,-30)和textcoords='data'說明了這里的文字是基于標注的點的x坐標的偏移+30以及標注點y坐標-30位置,就是我們要進行注釋文字的位置;
#fontsize = 16就說明字體的大??;
#arrowprops = dict()這個是對于這個箭頭的描述,arrowstyle='->'這個是箭頭的類型,connectionstyle="arc3,rad=.2"這兩個是描述我們的箭頭的弧度以及角度的。
plt.annotate(r'$2x+1=%s$'%y0,xy=(x0,y0),xycoords='data',xytext=(+30,-30),textcoords='offset points',fontsize=16,arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=.2'))
?
# 其中-3.7, 3,是選取text的位置, 空格需要用到轉字符\ ,fontdict設置文本字體.
plt.text(-3.7,3,r'$T3his\ is\ the\ some\ text.\mu\ \sigma_i\ \alpha_t$',
???????? fontdict={'size':'16','color':'red'})
1.5tick能見度
對被遮擋的圖像調節(jié)相關透明度,本例中設置 x軸 和 y軸 的刻度數(shù)字進行透明度設置
其中label.set_fontsize(12)重新調節(jié)字體大小
facecolor調節(jié) box 前景色,edgecolor 設置邊框, 本處設置邊框為無,alpha設置透明度.
for label in ax.get_xticklabels()+ax.get_yticklabels():
label.set_fontsize(12)
label.set_bbox(dict(facecolor='white',edgecolor='none',alpha=0.7))
1.6Figures and Subplots(圖和子圖)
fig = plt.figure()
我們不能在一個空白的figure上繪圖,必須要創(chuàng)建一個或更多的subplots(子圖
ax1 = fig.add_subplot(2, 2, 1))#figure是2x2(這樣一共有4幅圖),而且我們選中4個subplots(數(shù)字從1到4)中的第1個
#如果輸入plt.plot([1.5, 3.5, -2, 1.6])這樣的命令,matplotlib會把圖畫在最后一個figure的最后一個子圖上。
f, axes = plt.subplots(2, 3)????????????? #創(chuàng)建6個子圖
plt.subplots_adjust(wspace=0, hspace=0)# wspace和hspace控制figure寬度和長度的百分比,可以用來控制subplot之間的間隔
為了改變x-axis tick(x軸標記),使用set_xticks和set_xticklabels。前者告訴matplotlib沿著x軸的范圍,把標記放在哪里;默認會把所在位置作為標簽,但我們可以用set_xticklabels來設置任意值作為標簽:
ticks = ax.set_xticks([0, 250, 500, 750, 1000])
labels = ax.set_xticklabels(['one', 'two', 'three', 'four', 'five'],rotation=30, fontsize='small')????????? ???????????????????? # rotation選項讓x軸上的標記標簽有一個30度的旋轉
ax.set_title('My first matplotlib plot') ? ??????? #set_title給subplot一個標題
1.7Saving Plots to File(把圖保存為文件)
保存一個SVG類型的圖片
dpi:控制每英寸長度上的分辨率
bbox_inches, 能刪除figure周圍的空白部分
plt.savefig('figpath.png', dpi=400, bbox_inches='tight')
?
2.Seaborn
有五種seaborn的風格,它們分別是:darkgrid, whitegrid, dark, white, ticks。它們各自適合不同的應用和個人喜好。默認的主題是darkgrid。
import seaborn as sns
sns.set(style="ticks")
?
seaborn內置了不少樣例數(shù)據(jù),為dataframe類型, df = sns.load_dataset("anscombe")即讀取“anscombe”樣例數(shù)據(jù),如果要查看數(shù)據(jù),可以使用類似df.head()命令查看
df = sns.load_dataset("anscombe")
df.head()
?
relplot() 關系類圖表的接口,其實是下面兩種圖的集成,通過指定kind參數(shù)可以畫出下面的兩種圖
scatterplot() ???????????????????? 散點圖
lineplot() ???????????????????????? 折線圖
Categorical plots ???????????? 分類圖表
?
catplot() 分類圖表的接口,其實是下面八種圖表的集成,,通過指定kind參數(shù)可以畫出下面的八種圖
stripplot() ??????????????????????? 分類散點圖
swarmplot() ??????????????????? 能夠顯示分布密度的分類散點圖
boxplot() ???????????????????????? 箱圖
violinplot() ????????????????????? 小提琴圖
boxenplot() ???????????????????? 增強箱圖
pointplot() ?????????????????????? 點圖
barplot() ????????????????????????? 條形圖
countplot() ????????????????????? 計數(shù)圖
Distribution plot ???????????? 分布圖
?
jointplot() ??????????????????????? 雙變量關系圖
pairplot() ???????????????????????? 變量關系組圖
distplot() ???????????????????????? 直方圖,質量估計圖
kdeplot() ???????????????????????? 核函數(shù)密度估計圖
rugplot() ????????????????????????? 將數(shù)組中的數(shù)據(jù)點繪制為軸上的數(shù)據(jù)
Regression plots ???????????? 回歸圖
?
lmplot() ?????????????????????????? 回歸模型圖
regplot()?????? ?????????????????????????? 線性回歸圖
residplot() ?????????????????????? 線性回歸殘差圖
Matrix plots ??????????????????? 矩陣圖
?
heatmap() ??????????????????????? 熱力圖
clustermap() ??????????????????? 聚集圖