Matplotlib

樣式美化

style

  • 全部樣式
    • 語法:print(plt.style.available)
  • 使用樣式
    語法:plt.style.use('ggplot')

畫圖

建立畫布

plt.figure(figsize=(10, 6.5))
figsize 設置畫布大小

設置標題

- title:圖形標題
- 用法:plt.title('regression result comparison')
    - title(label, fontdict=None, loc='center', pad=None, **kwargs)
        - label : 字符串,標題名
        - fontdict:標題文本外觀(字典)
        {'famlily':['fantasy', 'Tahoma', 'monospace', 'Times New Roman']
         'color': 顏色
         'fontsize': 數字,字體大小
         'fontweight' : ['light', 'normal', 'medium', 'semibold', 'bold', 'heavy', 'black'] 字體粗細
         'verticalalignment': ['center' , 'top' , 'bottom' ,'baseline'] 設置水平對齊方式
         'horizontalalignment': [left,right,center]}垂直對齊方式
         'rotation':vertical,horizontal 也能夠爲數字,旋轉角度
         'alpha’:透明度,參數值0至1之間
         'backgroundcolor':標題背景顏色
         'bbox':給標題增長外框 ,經常使用參數以下:
             boxstyle方框外形
             facecolor(簡寫fc)背景顏色
             edgecolor(簡寫ec)邊框線條顏色
             edgewidth邊框線條大小
例子:
plt.title('Interesting Graph',fontsize='large',fontweight='bold') 設置字體大小與格式
plt.title('Interesting Graph',color='blue') 設置字體顏色
plt.title('Interesting Graph',loc ='left') 設置字體位置
plt.title('Interesting Graph',verticalalignment='bottom') 設置垂直對齊方式
plt.title('Interesting Graph',rotation=45) 設置字體旋轉角度
plt.title('Interesting',bbox=dict(facecolor='g', edgecolor='blue', alpha=0.65 )) 標題

圖例

  • legend
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.legend([s1,s2],[label1,label2],loc=0)
s1,s2爲不一樣圖形對象,例如線圖,散點圖

x軸標題,y軸標題

  • xlabel,ylabel
  • 用法同title

刻度線標籤

  • xtickets,ytickets
  • 用法
plt.xtickets(np.arange(5), ('a','b','c','d','e'))

軸範圍

  • xlim,ylim
  • 用法
plt.xlim((1,10))

增長文字到圖形

  • text
  • 用法
plt.text(x,t,str)
x,y 爲要添加文字的座標

color

折線圖

- 參數:
    - s:大小
    - edgecolors:邊框顏色
    - c:內置顏色
    - markevery:樣式maker的個數
    - linestyle:線樣式
    - maker:樣式
   
================    ===============================
    character           description
    ================    ===============================
    ``'-'``             solid line style
    ``'--'``            dashed line style
    ``'-.'``            dash-dot line style
    ``':'``             dotted line style
    ``'.'``             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
    ================    ===============================
畫出原始數據y的分佈,其中畫圖所需的x值域
使用自變量集X的shape獲得一個自增數字列表

plt.plot(np.arange(X.shape[0]), y, color='k', label='true y')

柱狀圖

matplotlib.pyplot.bar(left, height, alpha=1, width=0.8, color=, edgecolor=, label=, lw=3)

1. left:x軸的位置序列,通常採用range函數產生一個序列,可是有時候能夠是字符串
2. height:y軸的數值序列,也就是柱形圖的高度,通常就是咱們須要展現的數據;
3. alpha:透明度,值越小越透明
4. width:爲柱形圖的寬度,通常這是爲0.8便可;
5. color或facecolor:柱形圖填充的顏色;
6. edgecolor:圖形邊緣顏色
7. label:解釋每一個圖像表明的含義,這個參數是爲legend()函數作鋪墊的,表示該次bar的標籤,其中legend()函數loc參數以下:
8. bottom:列表,在此基礎上疊加柱狀圖
9. hatch:填充形狀{'/', '', '|', '-', '+', 'x', 'o', 'O', '.', '*'}
ghj =[5, 10 ,15, 20, 25]
it =[ 1, 2, 3, 4, 5]
plt.barh(ghj, it) 
橫着的柱狀圖

散點圖

scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, 
    alpha=None, linewidths=None, verts=None, edgecolors=None, hold=None, data=None, **kwargs)
  • x/y :數據
  • s :標記大小
    • 數值標量 : 以相同的大小繪製全部標記。
    • 行或列向量 : 使每一個標記具備不一樣的大小。x、y 和 sz 中的相應元素肯定每一個標記的位置和麪積。sz 的長度必須等於 x 和 y 的長度。
    • [] : 使用 36 平方磅的默認面積。
  • c:標記顏色
    • RGB 三元數或顏色名稱 - 使用相同的顏色繪製全部標記。
    • 由 RGB 三元數組成的三列矩陣 - 對每一個標記使用不一樣的顏色。矩陣的每行爲對應標記指定一種 RGB 三元數顏色。行數必須等於 x 和 y 的長度。
    • 向量 - 對每一個標記使用不一樣的顏色,並以線性方式將 c 中的值映射到當前顏色圖中的顏色。c 的長度必須等於 x 和 y 的長度。要更改座標區的顏色圖,請使用 colormap 函數。
選項 說明 對應的 RGB 三元數
'red' 或 'r' 紅色 [1,0,0]
'green' 或 'g' 綠色 [0,1,0]
'blue' 或 'b' 藍色 [0,0,1]
'yellow' 或 'y' 黃色 [1,1,0]
'magenta' 或 'm' 品紅色 [1,0,1]
'cyan' 或 'c' 青藍色 [0,1,1]
'white' 或 'w' 白色 [1,1,1]
'black' 或 'k' 黑色 [0,0,0]
  • edgecolors:輪廓顏色
  • linewidths:線寬
  • marker:標記樣式

餅圖

屬性 說明 類型
x 數據 list
labels 標籤 list
colors 指定餅圖的填充色 list
autopct 數據標籤 %0.1%% 保留一位小數
explode 突出的部分 list
shadow 是否顯示陰影 bool
pctdistance 數據標籤的距離圓心位置 0~1
labeldistance 設置各扇形標籤(圖例)與圓心的距離 0~1
startangle 開始繪圖的角度 float
radius 半徑長 默認是1
counterclock 是否讓餅圖按逆時針順序呈現
wedgeprops 設置餅圖內外邊界的屬性,如邊界線的粗細、顏色等 {'linewidth': 1.5, 'edgecolor':'black'}
textprops 設置餅圖中文本的屬性,如字體大小、顏色等 {'fontsize':12, 'color':'k'}
frame 是否要顯示餅圖背後的圖框,若是設置爲True的話,須要同時控制圖框x軸、y軸的範圍和餅圖的中心位置 bool

箱型圖

  • 展現數據的分佈
    數組

  • 圖表做用:
    • 1.反映一組數據的分佈特徵,如:分佈是否對稱,是否存在離羣點
    • 2.對多組數據的分佈特徵進行比較
    • 3.若是隻有一個定量變量,不多用箱線圖去看數據的分佈,而是用直方圖去觀察。通常都要跟其他的定性變量作分組箱線圖,能夠起對比做用。(key)
  • 適合數據類型:
    • 針對連續型變量
  • 用法:
    • 只有一個變量、一組的數據(1個變量,0個定性變量),好比:學生的成績狀況
    • 只有一個變量、多組數據(1個變量,1個定性變量[班級]),好比:一、二、3班學生的成績狀況
    • 只有一個變量、多組數據(1個變量,多個定性變量[年級、班級]),好比:初1、初2、初三的一、二、3班學生的成績狀況
    • 多個變量同理,看Y軸數據大小才相近才採用此用法
  • 參數app

屬性 說明 類型
x 指定要繪製箱線圖的數據 list
notch 是不是凹口的形式展示箱線圖,默認非凹口 bool
sym 指定異常點的形狀,默認爲o號顯示 +*.
vert 是否須要將箱線圖垂直襬放,默認垂直襬放 bool
whis 指定上下須與上下四分位的距離,默認爲1.5倍的四分位差 float
positions 指定箱線圖的位置,從左至右0,1,2遞增 list
widths 指定箱線圖的寬度,默認爲0.5 float
patch_artist 是否填充箱體的顏色 str
meanline 是否用線的形式表示均值,默認用點來表示 bool
showmeans 是否顯示均值,默認不顯示 bool
showcaps 是否顯示箱線圖頂端和末端的兩條線,默認顯示 bool
showbox 是否顯示箱線圖的箱體,默認顯示 bool
showfliers 是否顯示異常值,默認顯示 bool
boxprops 設置箱體的屬性,如邊框色,填充色等 {'color': 'b',"facecolor":"r"}
labels 爲箱線圖添加標籤,相似於圖例的做用 list
filerprops 設置異常值的屬性,如異常點的形狀、大小、填充色等 dict
medianprops 設置中位數的屬性,如線的類型、粗細等 {"linestyle":"--","color":"#FBFE00"}
meanprops 設置均值的屬性,如點的大小、顏色等 {"marker":"D","markerfacecolor":"white"}
capprops 設置箱線圖頂端和末端線條的屬性,如顏色、粗細等 dict
whiskerprops 設置須的屬性,如顏色、粗細、線的類型等 dict

註釋

  • plt.annotate()
  • 參數
    • s: 爲註釋文本內容
    • xy: 爲被註釋的座標點
    • xytext:爲註釋文字的座標位置
    • xycoords: 參數以下:
    • color:b’, ‘g’, ‘r’, ‘c’, ‘m’, ‘y’, ‘k’, ‘w
    • weight:ultralight’, ‘light’, ‘normal’, ‘regular’, ‘book’, ‘medium’, ‘roman’, ‘semibold’, ‘demibold’, ‘demi’, ‘bold’, ‘heavy’, ‘extra bold’, ‘black’
    • arrowprops
      • width:箭頭的寬度(以點爲單位)
      • headwidth:箭頭底部以點爲單位的寬度
      • headlength:箭頭的長度(以點爲單位)
      • shrink:總長度的一部分,從兩端「收縮」
      • facecolor:箭頭顏色
    • bbox給標題增長外框 ,經常使用參數以下:
      • boxstyle:方框外形
      • facecolor:(簡寫fc)背景顏色
      • edgecolor:(簡寫ec)邊框線條顏色
      • edgewidth:邊框線條大小

畫布分塊

  • 語法:plt.subplot(n, m, p)
    • 第一個數字n,表明畫布分紅n行
    • 第二個數字m,表明畫布分紅m列
    • 第三個數字p,從左到右數,從上到下,第p張圖

plt.subplots()

figsize定義畫布尺寸
fig, axes = plt.subplots(1,2,figsize=(10,4))
for ax in axes:
    ax.plot(x, y, 'r')
    ax.set_xlabel('x')
    ax.set_ylabel('y')
    ax.set_title('title')
fig.tight_layout() #會自動調整子圖參數,使之填充整個圖像區域

遇到中文亂碼問題

  • 找到matplotlib的配置文件位置
import matplotlib 
print(matplotlib.matplotlib_fname())
#我這裏的位置是C:\Python27\lib\site-packages\matplotlib\mpl-data\matplotlibrc
  • 打開matplotlibrc文件進行編輯,找到#font.family : sans-serif更改成: font.family : SimHei
  • -號會顯示出錯的解決方法爲: 在配置文件裏找到#axes.unicode_minus : True更改成:axes.unicode_minus : False
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用來正常顯示中文標籤
plt.rcParams['axes.unicode_minus']=False #用來正常顯示負號
黑體 SimHei
微軟雅黑 Microsoft YaHei
微軟正黑體 Microsoft JhengHei
新宋體 NSimSun
新細明體 PMingLiU
細明體 MingLiU
標楷體 DFKai-SB
仿宋 FangSong
楷體 KaiTi
仿宋_GB2312 FangSong_GB2312
楷體 _GB2312 KaiTi_GB2312

示例

  • 實例 1
import pandas as pd
import numpy as np
import matplotlib as mpl
mpl.rcParams['font.sans-serif']=['SimHei']
 
import matplotlib.pyplot as plt
y = range(1,17)
 
plt.bar(np.arange(16), y, alpha=0.5, width=0.3, color='yellow', edgecolor='red', label='The First Bar', lw=3)
plt.bar(np.arange(16)+0.4, y, alpha=0.2, width=0.3, color='green', edgecolor='blue', label='The Second Bar', lw=3)
plt.legend(loc='upper left')
plt.show()

  • 實例2
import matplotlib.pyplot as plt
import numpy as np

x = np.array([i for i in range(8)])
fig, axes = plt.subplots(1, 2, figsize=(10,4))
# 內嵌圖
x = np.array([i for i in range(8)])
ax2 = fig.add_axes([0.1, 0.2, 0.1, 0.3]) # inset axes
ax2.plot(x,x**2,'r-.',x,np.exp(x),'g*-')
# 圖1
axes[0].plot(x,x**2,'r-.',label="y = x**2")
axes[0].plot(x,np.exp(x),'g*-',label="y = np.exp(x)")
axes[0].set_title("Normal scale")
axes[0].legend(loc=2) # 標籤
# 圖2
x = np.array([i for i in range(100)])
axes[1].plot(x,x**2,'r-.',label="y = x**2")
axes[1].plot(x,np.exp(x),'g*-',label="y = np.exp(x)")
axes[1].legend(loc=2)
axes[1].set_yscale("log") # 設置縱座標值域
axes[1].set_title("Logarithmic scale (y)")
#自動調整子圖參數,使之填充整個圖像區域
fig.tight_layout()
plt.show()

fig.savefig("filename.png")

  • 實例3
from numpy import *

x = np.array([i for i in range(10)])
xx = linspace(0,3, 100)
n = np.array([0,1,2,3,4,5])
fig, axes = plt.subplots(1, 4, figsize=(12,3))
# 散點圖
axes[0].scatter(xx, xx + 0.25*np.random.randn(len(xx)))
axes[0].set_title("scatter")

axes[1].step(n, n**2, lw=2)
axes[1].set_title("step")
# 柱狀圖
axes[2].bar(n, n**2, align="center", width=0.5, alpha=0.5)
axes[2].set_title("bar")
# 填充,兩圖面積差
axes[3].fill_between(x, x**2, x**3, color="green", alpha=0.5)
axes[3].set_title("fill_between")
fig.tight_layout()
plt.show()
fig.savefig("fil.png")

  • 實例4
plt.rcParams['font.sans-serif']=['FangSong_GB2312'] #用來正常顯示中文標籤
colors = ['red','yellowgreen','lightskyblue']
male = 70
female = 20
other = 10
total = 100
labels = ['男性', '女性', '未填']
sizes = [male, female, other]
colors = ['cornflowerblue', 'orange', 'limegreen']
explode = (0, 0.1, 0)

fig1, ax1 = plt.subplots()
ax1.pie(sizes, explode=explode, labels=labels, colors=colors,
        autopct='%1.1f%%', shadow=False, startangle=90,
        textprops={'fontsize': 12, 'color': 'k'},
        labeldistance = 1
        )
ax1.axis('equal')
plt.legend(loc='upper right')

plt.show()

相關文章
相關標籤/搜索