精心总结了10个matplotlib绘图技巧,短小精悍,威力无穷
文章目錄
- 一、快速且正確的顯示中文
- 二、提高分辨率
- 三、添加數(shù)學(xué)公式
- 四、一行代碼提高顏值
- 五、調(diào)整圖例位置
- 六、獲得當(dāng)前繪圖區(qū)域
- 七、隱藏坐標(biāo)軸
- 八、指定坐標(biāo)軸刻度
- 九、添加自定義圖片
- 十、添加表格
大家好,在使用 Python 進(jìn)行數(shù)據(jù)可視化時,相信不論是什么工具,你都會發(fā)現(xiàn)有些操作/代碼段會頻繁的用到,這一點(diǎn)在matplotlib上尤為突出。
本文就向大家分享十個我常用的一些小技巧,大多一行代碼,短小精悍,威力無窮。喜歡記得收藏、點(diǎn)贊、關(guān)注。
一、快速且正確的顯示中文
在matplotlib中,默認(rèn)是沒法顯示中文的,原因很簡單,默認(rèn)使用的字體文件中不含中文。
當(dāng)你搜索如何設(shè)置中文時,會有很多教程,我曾經(jīng)也詳細(xì)的介紹過3種方法,但是在有的電腦上折騰很久也搞不定,所以當(dāng)你浪費(fèi)了太多時間也沒法解決,或者在一臺陌生的設(shè)備上使用,需要快速的讓matplotlib顯示中文可以使用下面的代碼。
import matplotlib as mplWRYH = mpl.font_manager.FontProperties(fname='/Users/font/WeiRuanYaHei-1.ttf') # 微軟雅黑字體plt.title('可視化', fontproperties=WRYH)很簡單,既然修改默認(rèn)的字體搞不定,那么就準(zhǔn)備一個中文字體的路徑,并在每次需要顯示中文的組件(標(biāo)題、注釋、圖例等)時,就強(qiáng)制指定使用這個字體。
這個辦法一定可以讓你圖中的中文快速且正確顯示出來,但是如果涉及中文的地方過多,還是需要在以后嘗試一勞永逸的將中文字體添加到默認(rèn)字體集中。
二、提高分辨率
如果感覺默認(rèn)生成的圖形分辨率不夠高,可以嘗試修改 dpi 來提高分辨率,在matplotlib中可以一次性通過plt.rcParams修改,也可以在創(chuàng)建畫布時為這一次的繪制修改,例如將分辨率調(diào)整至100
plt.figure(figsize = (7,6),dpi =100)如果你的設(shè)備是配備Retina屏幕的mac,可以在jupyter notebook中,使用下面一行代碼有效提高圖像畫質(zhì)
%config InlineBackend.figure_format = 'retina'三、添加數(shù)學(xué)公式
有時我們在繪圖時需要添加帶有數(shù)學(xué)符號、公式的文字,如果直接使用默認(rèn)的方法添加,雖然可以實(shí)現(xiàn),但是不夠美觀,其實(shí)在matplotlib中也支持輸出數(shù)學(xué)公式,就像下面的文字注釋一樣
只用在需要出現(xiàn)公式的位置使用r’你的公式’即可,比如plt.text(11000,0.45,r'擬合的曲線為$f(x) = 1.3x^2-6.54x+0.5$')注意$$中是latex格式的表達(dá)方式,如果不熟悉的話需要自行搜索。
當(dāng)然,也可以使用plt.rcParams['text.usetex'] = True設(shè)置默認(rèn)tex輸出,異曲同工,此處不多介紹。
四、一行代碼提高顏值
有時我們會覺得matplotlib默認(rèn)制作出來的圖片太樸素了,不夠高級,其實(shí)開發(fā)者也內(nèi)置了幾十種主題讓我們自己選擇,只要使用plt.style.use('主題名')指定主題即可。
例如使用R語言中經(jīng)典的ggplot主題
plt.style.use('ggplot')另外一種提高圖形顏值的代碼是借用seaborn調(diào)色板修改配色,也是一行代碼,通過sns.set_palette(xxxx)就能直接調(diào)整全局配色方案,下面是我比較喜歡的一種配色
import seaborn as sns sns.set_palette("pastel", 8)五、調(diào)整圖例位置
雖然matplotlib在生成圖例時,默認(rèn)會選擇一個最合適的位置,但是有時依舊不能讓人滿意。
相信你知道我們可以使用loc = xxxx自己設(shè)置圖例位置,但是對于xxxx每次都要查,看文字說明左上右下不如一張圖來的快,下面是我們可以選擇的9個位置,可以根據(jù)自己的需要進(jìn)行選擇。
六、獲得當(dāng)前繪圖區(qū)域
在原理篇文章中,我曾經(jīng)說到如果想要獲得更精細(xì)的調(diào)整,就需要使用ax.xxxx進(jìn)行調(diào)整,但有時我們開始沒有使用fig,ax=plt.subplots(figsize = (6,4),dpi=100)來定義ax,在需要使用時重新開始并定義是不推薦的,這時可以使用
ax = plt.gca()獲得當(dāng)前Figure中的Axes,并繼續(xù)正常使用ax.xxxx調(diào)整
七、隱藏坐標(biāo)軸
對于有些圖形我們希望通過隱藏坐標(biāo)軸來顯得更加美觀,這時可以ax.spines獲取對應(yīng)位置的的Spine對象,之后便可以任意修改是否顯示與顯示顏色,比如讓右邊和上面的線消失或者修改顏色
ax.spines['right'].set_color('None') ax.spines['top'].set_color('None') ax.spines['right'].set_color('deeppink') ax.spines['top'].set_color('blue') ax.spines['bottom'].set_color('green') ax.spines['left'].set_color('red')八、指定坐標(biāo)軸刻度
如果對于默認(rèn)生成的坐標(biāo)軸刻度不滿意,我們可以使用plt.yticks([])來自定義刻度,注意需要傳入一個你想要的刻度list,并且長度需要和刻度對應(yīng),例如下方代碼
label = ['2月7日','3月25日','5月13日','7月2日','8月21日','10月10日','11月29日','12月31日']plt.yticks(range(0,400,50), labels=label,rotation = 40,color = 'black')當(dāng)然如果label是空的話,可以結(jié)合上一個技巧把對應(yīng)的坐標(biāo)軸干掉,徹底消失
plt.yticks([])九、添加自定義圖片
有時我們希望在對數(shù)據(jù)可視化后添加一些圖片來豐富元素,雖然可以使用ps添加,但其實(shí)matplotlib也可以獨(dú)立完成,總共分兩步:打開圖片——添加圖片
首先導(dǎo)入相關(guān)的包并根據(jù)圖片路徑導(dǎo)入
from matplotlib.offsetbox import (OffsetImage,AnnotationBbox) import matplotlib.image as mpimg arr_img = mpimg.imread('你的圖片位置')接著就可以根據(jù)坐標(biāo)將圖片添加到指定位置,詳細(xì)的設(shè)置可以參考官方文檔,下面的代碼可以拿走就用,根據(jù)效果調(diào)整坐標(biāo)即可
imagebox = OffsetImage(arr_img, zoom=0.2) ab = AnnotationBbox(imagebox, [0.15,0.5],xybox=(170., -50.),xycoords='data',boxcoords="offset points",pad=0.5) ax.add_artist(ab)十、添加表格
有時只用圖片很難傳遞更多的信息,幸運(yùn)的是,在matplotlib中也可以使用plt.table來為圖片添加一張與之對應(yīng)的表格,只需要將你的數(shù)據(jù)按照指定格式傳入即可。
下面是我在官方文檔示例的基礎(chǔ)上,添加漸變效果的表格
data = [[ 66386, 174296, 75131, 577908, 32015],[ 58230, 381139, 78045, 99308, 160454],[ 89135, 80552, 152558, 497981, 603535],[ 78415, 81858, 150656, 193263, 69638],[139361, 331509, 343164, 781380, 52269]]columns = ('Freeze', 'Wind', 'Flood', 'Quake', 'Hail') rows = ['%d year' % x for x in (100, 50, 20, 10, 5)] values = np.arange(0, 2500, 500) value_increment = 1000 colors = plt.cm.BuPu(np.linspace(0, 0.5, len(rows))) n_rows = len(data)index = np.arange(len(columns)) + 0.3 bar_width = 0.4plt.figure(figsize = (8,5),dpi =100) y_offset = np.zeros(len(columns)) cell_text = [] for row in range(n_rows):plt.bar(index, data[row], bar_width, bottom=y_offset, color=colors[row])y_offset = y_offset + data[row]cell_text.append(['%1.1f' % (x / 1000.0) for x in y_offset]) colors = colors[::-1] cell_text.reverse()the_table = plt.table(cellText=cell_text,rowLabels=rows,rowColours=colors,colLabels=columns,loc='bottom',cellColours=plt.cm.Blues(x))plt.subplots_adjust(left=0.2, bottom=0.2)plt.ylabel("Loss in ${0}'s".format(value_increment)) plt.yticks(values * value_increment, ['%d' % val for val in values]) plt.xticks([]) plt.title('Loss by Disaster')plt.show()以上就是本文和大家總結(jié)的10個matplotlib小技巧,在未來的文章中我會繼續(xù)分享相關(guān)知識,也希望大家可以在使用一些數(shù)據(jù)可視化工具時可以不斷總結(jié),不斷進(jìn)步。
總結(jié)
以上是生活随笔為你收集整理的精心总结了10个matplotlib绘图技巧,短小精悍,威力无穷的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GPT-4最震撼我的一点
- 下一篇: HTML页面,图片img在容器DIV中,