精心总结了10个matplotlib绘图技巧,短小精悍,威力无穷
文章目錄
- 一、快速且正確的顯示中文
- 二、提高分辨率
- 三、添加數學公式
- 四、一行代碼提高顏值
- 五、調整圖例位置
- 六、獲得當前繪圖區域
- 七、隱藏坐標軸
- 八、指定坐標軸刻度
- 九、添加自定義圖片
- 十、添加表格
大家好,在使用 Python 進行數據可視化時,相信不論是什么工具,你都會發現有些操作/代碼段會頻繁的用到,這一點在matplotlib上尤為突出。
本文就向大家分享十個我常用的一些小技巧,大多一行代碼,短小精悍,威力無窮。喜歡記得收藏、點贊、關注。
一、快速且正確的顯示中文
在matplotlib中,默認是沒法顯示中文的,原因很簡單,默認使用的字體文件中不含中文。
當你搜索如何設置中文時,會有很多教程,我曾經也詳細的介紹過3種方法,但是在有的電腦上折騰很久也搞不定,所以當你浪費了太多時間也沒法解決,或者在一臺陌生的設備上使用,需要快速的讓matplotlib顯示中文可以使用下面的代碼。
import matplotlib as mplWRYH = mpl.font_manager.FontProperties(fname='/Users/font/WeiRuanYaHei-1.ttf') # 微軟雅黑字體plt.title('可視化', fontproperties=WRYH)很簡單,既然修改默認的字體搞不定,那么就準備一個中文字體的路徑,并在每次需要顯示中文的組件(標題、注釋、圖例等)時,就強制指定使用這個字體。
這個辦法一定可以讓你圖中的中文快速且正確顯示出來,但是如果涉及中文的地方過多,還是需要在以后嘗試一勞永逸的將中文字體添加到默認字體集中。
二、提高分辨率
如果感覺默認生成的圖形分辨率不夠高,可以嘗試修改 dpi 來提高分辨率,在matplotlib中可以一次性通過plt.rcParams修改,也可以在創建畫布時為這一次的繪制修改,例如將分辨率調整至100
plt.figure(figsize = (7,6),dpi =100)如果你的設備是配備Retina屏幕的mac,可以在jupyter notebook中,使用下面一行代碼有效提高圖像畫質
%config InlineBackend.figure_format = 'retina'三、添加數學公式
有時我們在繪圖時需要添加帶有數學符號、公式的文字,如果直接使用默認的方法添加,雖然可以實現,但是不夠美觀,其實在matplotlib中也支持輸出數學公式,就像下面的文字注釋一樣
只用在需要出現公式的位置使用r’你的公式’即可,比如plt.text(11000,0.45,r'擬合的曲線為$f(x) = 1.3x^2-6.54x+0.5$')注意$$中是latex格式的表達方式,如果不熟悉的話需要自行搜索。
當然,也可以使用plt.rcParams['text.usetex'] = True設置默認tex輸出,異曲同工,此處不多介紹。
四、一行代碼提高顏值
有時我們會覺得matplotlib默認制作出來的圖片太樸素了,不夠高級,其實開發者也內置了幾十種主題讓我們自己選擇,只要使用plt.style.use('主題名')指定主題即可。
例如使用R語言中經典的ggplot主題
plt.style.use('ggplot')另外一種提高圖形顏值的代碼是借用seaborn調色板修改配色,也是一行代碼,通過sns.set_palette(xxxx)就能直接調整全局配色方案,下面是我比較喜歡的一種配色
import seaborn as sns sns.set_palette("pastel", 8)五、調整圖例位置
雖然matplotlib在生成圖例時,默認會選擇一個最合適的位置,但是有時依舊不能讓人滿意。
相信你知道我們可以使用loc = xxxx自己設置圖例位置,但是對于xxxx每次都要查,看文字說明左上右下不如一張圖來的快,下面是我們可以選擇的9個位置,可以根據自己的需要進行選擇。
六、獲得當前繪圖區域
在原理篇文章中,我曾經說到如果想要獲得更精細的調整,就需要使用ax.xxxx進行調整,但有時我們開始沒有使用fig,ax=plt.subplots(figsize = (6,4),dpi=100)來定義ax,在需要使用時重新開始并定義是不推薦的,這時可以使用
ax = plt.gca()獲得當前Figure中的Axes,并繼續正常使用ax.xxxx調整
七、隱藏坐標軸
對于有些圖形我們希望通過隱藏坐標軸來顯得更加美觀,這時可以ax.spines獲取對應位置的的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')八、指定坐標軸刻度
如果對于默認生成的坐標軸刻度不滿意,我們可以使用plt.yticks([])來自定義刻度,注意需要傳入一個你想要的刻度list,并且長度需要和刻度對應,例如下方代碼
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')當然如果label是空的話,可以結合上一個技巧把對應的坐標軸干掉,徹底消失
plt.yticks([])九、添加自定義圖片
有時我們希望在對數據可視化后添加一些圖片來豐富元素,雖然可以使用ps添加,但其實matplotlib也可以獨立完成,總共分兩步:打開圖片——添加圖片
首先導入相關的包并根據圖片路徑導入
from matplotlib.offsetbox import (OffsetImage,AnnotationBbox) import matplotlib.image as mpimg arr_img = mpimg.imread('你的圖片位置')接著就可以根據坐標將圖片添加到指定位置,詳細的設置可以參考官方文檔,下面的代碼可以拿走就用,根據效果調整坐標即可
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)十、添加表格
有時只用圖片很難傳遞更多的信息,幸運的是,在matplotlib中也可以使用plt.table來為圖片添加一張與之對應的表格,只需要將你的數據按照指定格式傳入即可。
下面是我在官方文檔示例的基礎上,添加漸變效果的表格
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()以上就是本文和大家總結的10個matplotlib小技巧,在未來的文章中我會繼續分享相關知識,也希望大家可以在使用一些數據可視化工具時可以不斷總結,不斷進步。
總結
以上是生活随笔為你收集整理的精心总结了10个matplotlib绘图技巧,短小精悍,威力无穷的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GPT-4最震撼我的一点
- 下一篇: HTML页面,图片img在容器DIV中,