天天看點

Python可視化33|matplotlib-rcParams及繪圖風格(style)設定詳解1、rcParams預設參數修改2、繪圖風格設定

本文詳細介紹matplotlib-繪圖風格(style)及rcParams設定。
Python可視化33|matplotlib-rcParams及繪圖風格(style)設定詳解1、rcParams預設參數修改2、繪圖風格設定

本文速覽

1、rcParams預設參數修改

rcParams中預設參數繪圖

修改rcParams預設參數

取消rcParams參數修改

2、繪圖風格設定

with局部修改繪圖風格

使用mpl.rc_file_defaults()達到局部修改的目的

組合使用多種繪圖風格

自定義繪圖風格

1、rcParams預設參數修改

rcParams中存儲了Matplotlib繪圖時所有參數的預設值,參數詳細:

windows見:xx\anaconda3\anaconda3\Lib\site-packages\matplotlib\mpl-data\matplotlibrc

linux:matplotlib.matplotlib_fname()檢視

  • rcParams中預設參數繪圖

import numpy as np
import matplotlib.pyplot as plt
plt.figure(dpi=100)
plt.plot([1,2,3])
           
Python可視化33|matplotlib-rcParams及繪圖風格(style)設定詳解1、rcParams預設參數修改2、繪圖風格設定
  • 修改rcParams預設參數

mpl.rc_params()類似一個字典對象,是以可以通過鍵修改其值,變動為全局修改,改動後整個figure都實用【jupyter notebook中每個cell都使用該風格】,除非重新啟動了IDE。

以下修改部分預設參數:

#lines.linestyle: -#預設線性為實心線'-'
#lines.marker: None#預設線上無marker
#axes.grid: False#預設無網格線

#預設繪圖顔色修改
#axes.prop_cycle	cycler('color', ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd', '#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf'])


mpl.rcParams['lines.marker'] = '^'
mpl.rcParams['lines.linestyle'] = '--'
mpl.rcParams['axes.grid'] = True

mpl.rcParams['axes.prop_cycle'] = cycler(color=['r', 'g', 'b', 'y'])
plt.figure(dpi=100)
plt.plot([1,2,3])

print(mpl.rcParams['lines.marker'])
           
Python可視化33|matplotlib-rcParams及繪圖風格(style)設定詳解1、rcParams預設參數修改2、繪圖風格設定
  • 取消rcParams參數修改

有mpl.rc_file_defaults()和mpl.rcdefaults()兩種方法可以使用:

mpl.rc_file_defaults(): 恢複到本次導入matplotlib時的預設配置【建議該種方式,類似寫了一天的論文沒有儲存,昨天寫的依舊在】

mpl.rcdefaults():恢複到下載下傳matplotlib時的預設配置【不建議,類似手機恢複出廠設定】

當然,最原始的方式就是重新啟動ide即可達到mpl.rc_file_defaults()的效果。

mpl.rcParams['lines.marker'] = '^'
mpl.rcParams['lines.linestyle'] = '--'
mpl.rcParams['axes.grid'] = True
mpl.rc_file_defaults() #取消以上修改的預設參數

plt.figure(dpi=100)
plt.plot([1,2,3])
           
Python可視化33|matplotlib-rcParams及繪圖風格(style)設定詳解1、rcParams預設參數修改2、繪圖風格設定

2、繪圖風格設定

matplotlib繪圖風格的使用見之前文章:matplotlib 26中繪圖風格大全

  • with局部修改繪圖風格

繪圖風格隻對with子產品中的axes起作用

import numpy as np
import matplotlib.pyplot as plt
mpl.rc_file_defaults()
my_dpi=96
plt.figure(figsize=(480/my_dpi,480/my_dpi),dpi=my_dpi)
plt.figure()


with plt.style.context('ggplot'):#使用with 臨時修改繪圖風格
    plt.subplot(221)
    plt.plot([-1,0,1])


plt.subplot(222)#因為上一個子圖隻是臨時修改,是以目前子圖使用了預設風格,沒有沿用'ggplot'風格
plt.plot([1,2,3])

plt.style.use('fivethirtyeight')#
plt.subplot(223)#必需置于style之後,否則毫無用處
plt.plot([1,2,3])

plt.subplot(224)#因為上一個子圖修改了全局變量風格,是以目前子圖沿用'fivethirtyeight'風格
plt.plot([1,2,3])
           
Python可視化33|matplotlib-rcParams及繪圖風格(style)設定詳解1、rcParams預設參數修改2、繪圖風格設定
  • 使用mpl.rc_file_defaults()達到局部修改的目的

直接使用mpl.rc_file_defaults()清除所有設定,但時,不建議使用,因為有時候我們不單單隻是修改了style。還修改了其它預設參數。

plt.style.use('fivethirtyeight')#
plt.subplot(121)#必需置于style之後,否則毫無用處
plt.plot([1,2,3])

mpl.rc_file_defaults()#清除格式
plt.subplot(122)#因為上一個子圖修改了全局變量風格,是以目前子圖沿用'fivethirtyeight'風格
plt.plot([1,2,3])
           
Python可視化33|matplotlib-rcParams及繪圖風格(style)設定詳解1、rcParams預設參數修改2、繪圖風格設定
  • 組合使用多種繪圖風格

mpl.rc_file_defaults()
plt.style.use('fivethirtyeight')
plt.subplot(131)
plt.plot([1,2,3])
plt.title("'fivethirtyeight'")

mpl.rc_file_defaults()
plt.style.use('ggplot')
plt.subplot(132)
plt.plot([1,2,3])
plt.title("'ggplot'")


mpl.rc_file_defaults()#清除格式
plt.style.use(['fivethirtyeight', 'ggplot'])#風格'fivethirtyeight', 'ggplot'結合
plt.subplot(133)
plt.plot([1,2,3])
plt.title("['fivethirtyeight', 'ggplot']")
           
Python可視化33|matplotlib-rcParams及繪圖風格(style)設定詳解1、rcParams預設參數修改2、繪圖風格設定
  • 自定義繪圖風格

非常簡單,隻需要建立一個檔案:my1st.mplstyle

輸入你想修改的内容,舉例如下:

axes.prop_cycle: cycler('color', ['c72e29', 'fc4f30', 'e5ae38', '6d904f', '8b8b8b', '810f7c'])

axes.titlesize : 16
axes.labelsize : 15
axes.grid : True
grid.color : 0.8
axes.facecolor: 0.98

axes.spines.top : False
axes.spines.right:  False

lines.linewidth : 1.5
lines.linestyle : --
lines.marker : *
lines.markerfacecolor : 098154
lines.markeredgewidth: 0
lines.markersize : 20


xtick.labelsize : 10
ytick.labelsize : 10
           

使用my1st.mplstyle風格繪張圖:

mpl.rc_file_defaults()
plt.style.use(r'xxx\anaconda3\anaconda3\Lib\site-packages\matplotlib\mpl-data\stylelib\my1st.mplstyle')#加絕對路徑導入制作的style檔案
plt.plot([1,2,3])
plt.title('My1st mplstyle')
           
Python可視化33|matplotlib-rcParams及繪圖風格(style)設定詳解1、rcParams預設參數修改2、繪圖風格設定

參考資料

  • https://matplotlib.org/tutorials/introductory/customizing.html#customizing-with-matplotlibrc-files
  • https://github.com/matplotlib/matplotlib/blob/master/matplotlibrc.template
Python可視化33|matplotlib-rcParams及繪圖風格(style)設定詳解1、rcParams預設參數修改2、繪圖風格設定