樣式美化
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 )) 標題
圖例
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軸標題
刻度線標籤
plt.xtickets(np.arange(5), ('a','b','c','d','e'))
軸範圍
plt.xlim((1,10))
增長文字到圖形
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 函數。
'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() #會自動調整子圖參數,使之填充整個圖像區域
遇到中文亂碼問題
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 #用來正常顯示負號
微軟雅黑 |
Microsoft YaHei |
微軟正黑體 |
Microsoft JhengHei |
新宋體 |
NSimSun |
新細明體 |
PMingLiU |
細明體 |
MingLiU |
標楷體 |
DFKai-SB |
仿宋 |
FangSong |
楷體 |
KaiTi |
仿宋_GB2312 |
FangSong_GB2312 |
楷體 _GB2312 |
KaiTi_GB2312 |
示例
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()
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")
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")
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()