1. 程式人生 > >Python資料視覺化matplotlib(一)—— 圖表的基本元素

Python資料視覺化matplotlib(一)—— 圖表的基本元素

Python資料視覺化matplotlib(一)—— 圖表的基本元素

圖表建立

plt.show()

# 圖表視窗1 → plt.show()

plt.plot(np.random.rand(10))
plt.show()
# 直接生成圖表

這裡寫圖片描述

魔法函式

% matplotlib inline 嵌入圖表

# 圖表視窗2 → 魔法函式,嵌入圖表

%matplotlib inline
x = np.random.randn(1000)
y = np.random.randn(1000)
plt.scatter(x, y)
# 直接嵌入圖表,不用plt.show()
# <matplotlib.collections.PathCollection at ...> 代表該圖表物件

這裡寫圖片描述

% matplotlib notebook 彈出可互動的matplotlib視窗

# 圖表視窗3 → 魔法函式,彈出可互動的matplotlib視窗

% matplotlib notebook
s = pd.Series(np.random.randn(100))
s.plot(style = 'k--o',figsize=(10,5))
# 可互動的matplotlib視窗,不用plt.show()
# 可做一定調整

在這裡要自己嘗試看看什麼效果

% matplotlib qt5 彈出matplotlib控制檯

# 圖表視窗4 → 魔法函式,彈出matplotlib控制檯
% matplotlib qt5 df = pd.DataFrame(np.random.rand(50,2),columns=['A','B']) df.hist(figsize=(12,5),color='g',alpha=0.8) # 可互動性控制檯 # 如果已經設定了顯示方式(比如notebook),需要重啟然後再執行魔法函式 # 網頁嵌入的互動性視窗 和 控制檯,只能顯示一個 #plt.close() # 關閉視窗 #plt.gcf().clear() # 每次清空圖表內內容
在這裡要自己嘗試看看什麼效果

這裡寫圖片描述

圖表的基本元素

圖表的基本元素

這裡寫圖片描述

# 圖名,圖例,軸標籤,軸邊界,軸刻度,軸刻度標籤等
df = pd.DataFrame(np.random.rand(10,2), columns=['A','B']) # print(df) # print('=========') f = plt.figure(figsize=(10, 10)) #生成視窗物件,並設定大小 fig = df.plot(figsize=(8, 6)) # 建立圖表物件,設定大小並賦值給fig # print(fig, type(fig)) # print('---------') # print(f, type(f)) plt.title('aa') # 表頭 plt.xlabel('x') # x軸標籤 plt.ylabel('y') # y軸標籤 plt.legend(loc = 'best') # 顯示圖例,loc表示位置 # 'best' : 0, (only implemented for axes legends)(自適應方式) # 'upper right' : 1, # 'upper left' : 2, # 'lower left' : 3, # 'lower right' : 4, # 'right' : 5, # 'center left' : 6, # 'center right' : 7, # 'lower center' : 8, # 'upper center' : 9, # 'center' : 10, plt.xlim([0,10]) # x軸邊界 plt.ylim([0,1.1]) # y軸邊界 plt.xticks(range(10)) # 設定x刻度 plt.yticks([0,0.2,0.4,0.6,0.8,1.0,1.2]) # 設定y刻度 fig.set_xticklabels('%.1f'%i for i in range(10))# x軸刻度標籤 fig.set_yticklabels("%.2f" %i for i in [0,0.2,0.4,0.6,0.8,1.0,1.2]) # y軸刻度標籤 # 範圍只限定圖表的長度,刻度則是決定顯示的標尺 → 這裡x軸範圍是0-12,但刻度只是0-9,刻度標籤使得其顯示1位小數 # 軸標籤則是顯示刻度的標籤 # print(fig,type(fig)) # 查看錶格本身的顯示方式,以及類別

這裡寫圖片描述

[Text(0,0,'0.00'),
 Text(0,0,'0.20'),
 Text(0,0,'0.40'),
 Text(0,0,'0.60'),
 Text(0,0,'0.80'),
 Text(0,0,'1.00'),
 Text(0,0,'1.20')]

### 圖表的基本樣式

#通過ndatty 建立圖表

x = np.linspace(-np.pi, np.pi, 256, endpoint=True)

c,s = np.cos(x), np.sin(x)
plt.plot(c)
plt.plot(s)

plt.grid(True, linestyle='--', color='gray', linewidth='0.5', axis='both')  # 建立格網
# 顯示網格
# linestyle:線型
# color:顏色
# linewidth:寬度
# axis:x,y,both,顯示x/y/兩者的格網

plt.tick_params(bottom='on', top='on', left='on', right='on')
# 刻度顯示

import matplotlib
matplotlib.rcParams['xtick.direction'] = 'out'
matplotlib.rcParams['ytick.direction'] = 'in'
# 設定刻度的方向,in,out,inout
# 這裡需要匯入matploltib,而不僅僅匯入matplotlib.pyplot


frame = plt.gca()
plt.axis('on')
# 關閉座標軸
frame.axes.get_xaxis().set_visible(True)
frame.axes.get_yaxis().set_visible(False)

這裡寫圖片描述

圖表樣式的建立

linestyle 線樣式

#線樣式


plt.plot([i**2 for i in range(100)],
        linestyle='-.')
# '-'       solid line style
# '--'      dashed line style
# '-.'      dash-dot line style
# ':'       dotted line style

這裡寫圖片描述

marker 標記樣式

# marker引數

s = pd.Series(np.random.randn(10).cumsum())
s.plot(linestyle='-.',
      marker='D')
# '.'       point marker
# ','       pixel marker
# 'o'       circle marker
# 'v'       triangle_down marker
# '^'       triangle_up marker
# '<'       triangle_left marker
# '>'       triangle_right marker
# '1'       tri_down marker
# '2'       tri_up marker
# '3'       tri_left marker
# '4'       tri_right marker
# 's'       square marker
# 'p'       pentagon marker
# '*'       star marker
# 'h'       hexagon1 marker
# 'H'       hexagon2 marker
# '+'       plus marker
# 'x'       x marker
# 'D'       diamond marker
# 'd'       thin_diamond marker
# '|'       vline marker
# '_'       hline marker

這裡寫圖片描述

color 顏色

# color引數

plt.hist(np.random.randn(100),
        color='g',
        alpha=0.6)
# alpha:0-1,透明度
# 常用顏色簡寫:red-r, green-g, black-k, blue-b, yellow-y


df = pd.DataFrame(np.random.randn(1000, 4), columns=list('ABCD'))
df = df.cumsum()
df.plot(style='--', alpha= 0.8, colormap='BrBG_r' )

# colormap:顏色板,包括:
# Accent, Accent_r, Blues, Blues_r, BrBG, BrBG_r, BuGn, BuGn_r, BuPu, BuPu_r, CMRmap, CMRmap_r, Dark2, Dark2_r, GnBu, GnBu_r, Greens, Greens_r,
# Greys, Greys_r, OrRd, OrRd_r, Oranges, Oranges_r, PRGn, PRGn_r, Paired, Paired_r, Pastel1, Pastel1_r, Pastel2, Pastel2_r, PiYG, PiYG_r, 
# PuBu, PuBuGn, PuBuGn_r, PuBu_r, PuOr, PuOr_r, PuRd, PuRd_r, Purples, Purples_r, RdBu, RdBu_r, RdGy, RdGy_r, RdPu, RdPu_r, RdYlBu, RdYlBu_r, 
# RdYlGn, RdYlGn_r, Reds, Reds_r, Set1, Set1_r, Set2, Set2_r, Set3, Set3_r, Spectral, Spectral_r, Wistia, Wistia_r, YlGn, YlGnBu, YlGnBu_r, 
# YlGn_r, YlOrBr, YlOrBr_r, YlOrRd, YlOrRd_r, afmhot, afmhot_r, autumn, autumn_r, binary, binary_r, bone, bone_r, brg, brg_r, bwr, bwr_r, 
# cool, cool_r, coolwarm, coolwarm_r, copper, copper_r, cubehelix, cubehelix_r, flag, flag_r, gist_earth, gist_earth_r, gist_gray, gist_gray_r,
# gist_heat, gist_heat_r, gist_ncar, gist_ncar_r, gist_rainbow, gist_rainbow_r, gist_stern, gist_stern_r, gist_yarg, gist_yarg_r, gnuplot, 
# gnuplot2, gnuplot2_r, gnuplot_r, gray, gray_r, hot, hot_r, hsv, hsv_r, inferno, inferno_r, jet, jet_r, magma, magma_r, nipy_spectral, 
# nipy_spectral_r, ocean, ocean_r, pink, pink_r, plasma, plasma_r, prism, prism_r, rainbow, rainbow_r, seismic, seismic_r, spectral, 
# spectral_r ,spring, spring_r, summer, summer_r, terrain, terrain_r, viridis, viridis_r, winter, winter_r

# 其他引數見“顏色引數.docx”

這裡寫圖片描述

這裡寫圖片描述

style 風格

# style引數,可以包含linestyle,marker,color

ts = pd.Series(np.random.randn(1000).cumsum(), 
               index=pd.date_range('1/1/2017',
               periods=1000))
ts.plot(style='--gx', grid=True)

# style → 風格字串,這裡包括了linestyle(-),marker(.),color(g)
# plot()內也有grid引數

這裡寫圖片描述

# 整體風格樣式

import matplotlib.style as psl
print(plt.style.available)
# 檢視樣式列表

psl.use('bmh')
ts = pd.Series(np.random.randn(100).cumsum(), 
               index=pd.date_range('1/1/2017',
               periods=100))
ts.plot(style='-g.', grid=True)
['bmh', 'classic', 'dark_background', 'fast', 'fivethirtyeight', 'ggplot', 'grayscale', 'seaborn-bright', 'seaborn-colorblind', 'seaborn-dark-palette', 'seaborn-dark', 'seaborn-darkgrid', 'seaborn-deep', 'seaborn-muted', 'seaborn-notebook', 'seaborn-paper', 'seaborn-pastel', 'seaborn-poster', 'seaborn-talk', 'seaborn-ticks', 'seaborn-white', 'seaborn-whitegrid', 'seaborn', 'Solarize_Light2', 'tableau-colorblind10', '_classic_test']

這裡寫圖片描述

刻度,註解及圖表輸出

刻度

主刻度(major)與次刻度(minor)

from matplotlib.ticker import MultipleLocator, FormatStrFormatter

t = np.arange(0.0, 100.0, 1)
s = np.sin(0.1*np.pi*t)*np.exp(-t*0.01)
ax = plt.subplot(111)   #一般子啊ax中設定,不在plot中設定
plt.plot(t, s,'--*', color='b')
plt.grid(True, linestyle='-', color='gray', linewidth='0.5', axis='both')
#網格


xmajorLocator = MultipleLocator(10)   #將x軸主刻度標籤設定為10的倍數
xmajorFormatter = FormatStrFormatter('%.0f')  #設定x軸標籤文字的格式
xminorLocator = MultipleLocator(5)  #將X軸次刻度標籤設定為5的倍數

ymajorlocator = MultipleLocator(0.5)  #將y軸主刻度設定為0.5的倍數
ymajorFormatter = FormatStrFormatter('%.0f')  #將Y軸刻度標籤設定格式
yminorlocator = MultipleLocator(0.1)   #將y軸次刻度設定為0.1的倍數

ax.xaxis.set_major_locator(xmajorLocator)   #設定X軸主刻度
ax.xaxis.set_major_formatter(xmajorFormatter)   #設定x軸主刻度標籤
ax.xaxis.set_minor_locator(xminorLocator)   #設定X軸次刻度

# ax.yaxis.set_major_locator(ymajorlocator)  

這裡寫圖片描述

註釋

# 註釋

df = pd.DataFrame(np.random.rand(10,2))
df.plot(style='-gx')
plt.text(2, 0.4,'nihao',fontsize=10)
#註釋 plt.text(橫座標,縱座標,文字)

這裡寫圖片描述

圖表輸出

df = pd.DataFrame(np.random.randn(100,4),columns=list('ABCD'))
df = df.cumsum()
df.plot(style = '--', alpha = 0.5)
plt.legend(loc = 'best')

plt.savefig('E:\\DataScience\\python\\資料視覺化包\\pic.png',
           dpi = 800,
#            bbox_inches = 'tight',
           facecolor = 'w',
           edgecolor = 'blue')
# 可支援png,pdf,svg,ps,eps…等,以後綴名來指定
# dpi是解析度
# bbox_inches:圖表需要儲存的部分。如果設定為‘tight’,則嘗試剪除圖表周圍的空白部分。
# facecolor,edgecolor: 影象的背景色,預設為‘w’(白色)

這裡寫圖片描述