python用matplotlib繪制二維坐標軸,設(shè)置箭頭指向,文本內(nèi)容方式
使用matplotlib繪制二維坐標軸,設(shè)置箭頭指向,文本內(nèi)容
我們在使用matplotlib繪制圖像時,默認的坐標軸是在左下角,這樣對于一些曲線的顯示就不太清楚。
如下:
import matplotlib.pyplot as plt import numpy as np x = np.linspace(-10, 10, 100) y1 = 2 * x y2 = x * x plt.figure() plt.xlabel('X axis') plt.ylabel('Y axis') plt.plot(x, y1, linestyle='--') plt.plot(x, y2) plt.show()
根據(jù)X和Y繪制兩條曲線,直接繪制的話,坐標軸就在左下角。
對于曲線的展示不清楚,比如我們想把(0,0)點作為坐標軸原點。
可以參考下面的方法。
1.更改坐標軸的位置
可以看到,默認繪圖是四個邊把圖像框起來了。spine() 這個單詞的意思是脊梁,就是包圍圖表的線條。
如下:
分為 top,bottom,left,right 上下左右四條邊。我們的方法就是隱藏右邊和上邊,然后移動左邊和下邊,移動到想要的位置。
1.首先要獲取整張圖像的坐標,方法是
ax = plt.gca() # 獲取整張圖像的坐標的對象
2.隱藏起來兩條邊,右邊和上邊
# 將右邊,上邊的兩條邊顏色設(shè)置為空 其實就相當于抹掉這兩條邊 ax.spines[‘right'].set_color(‘none') ax.spines[‘top'].set_color(‘none')
3.移動左邊和下邊,指定為為x軸和y軸
ax.xaxis.set_ticks_position('bottom') ax.yaxis.set_ticks_position('left')
4.設(shè)置坐標軸交點
# 設(shè)置(0,0)為兩坐標軸的交點 ax.spines[‘bottom'].set_position((‘data', 0)) ax.spines[‘left'].set_position((‘data', 0))
移動坐標軸后,繪制圖像結(jié)果如下:
完整代碼:
import matplotlib.pyplot as plt import numpy as np x = np.linspace(-10, 10, 100) y1 = 2 * x y2 = x * x plt.figure() plt.xlabel('X axis') plt.ylabel('Y axis') # 設(shè)置坐標軸的文字標簽 ax = plt.gca() # get current axis 獲得坐標軸對象 ax.spines['right'].set_color('none') ax.spines['top'].set_color('none') # 將右邊 上邊的兩條邊顏色設(shè)置為空 其實就相當于抹掉這兩條邊 ax.xaxis.set_ticks_position('bottom') ax.yaxis.set_ticks_position('left') # 指定下邊的邊作為 x 軸 指定左邊的邊為 y 軸 ax.spines['bottom'].set_position(('data', 0)) # 指定 data 設(shè)置的bottom(也就是指定的x軸)綁定到y(tǒng)軸的0這個點上 ax.spines['left'].set_position(('data', 0)) plt.plot(x, y1, linestyle='--') plt.plot(x, y2) plt.show()
2. 設(shè)置箭頭內(nèi)容指向曲線
在繪制曲線時,我們想要用在圖像箭頭標注一下表達式,調(diào)用的函數(shù)如下:
annotate(s='str', xy=(x,y), xycoords='data', xytext=(l1,l2), textcoords, arrowprops) # s為標注內(nèi)容 # xy為基準點 # xycoords='data' xy的坐標是基于data的 # xytext 為注釋文字的坐標位置 # textcoords='offset point'代表以這個點為基準 # arrowprops描述箭頭,線的弧度等信息,箭頭參數(shù),參數(shù)類型為字典dict
# 添加標注 x0 = 1 y0 = 2 * x0 + 1 plt.scatter(x0, y0, s=50, color='b') plt.plot([x0, x0], [y0, y0], 'k--', lw=2.5) plt.annotate(r'$2x+1=%s$' % y0, xy=(x0, y0), xycoords='data', xytext=(+30, -30), textcoords='offset points', fontsize=16, arrowprops=dict(arrowstyle='->', connectionstyle='arc3,rad=.2'))
繪制結(jié)果如下:
完整代碼:
import matplotlib.pyplot as plt import numpy as np x = np.linspace(-3, 3, 50) y = 2*x+1 plt.figure(num=1, figsize=(8, 5)) plt.plot(x, y) ax = plt.gca() ax.spines['right'].set_color('none') ax.spines['top'].set_color('none') ax.xaxis.set_ticks_position('bottom') ax.yaxis.set_ticks_position('left') ax.spines['bottom'].set_position(('data', 0)) ax.spines['left'].set_position(('data', 0)) # 添加標注 x0 = 1 y0 = 2 * x0 + 1 plt.scatter(x0, y0, s=50, color='b') plt.plot([x0, x0], [y0, y0], 'k--', lw=2.5) plt.annotate(r'$2x+1=%s$' % y0, xy=(x0, y0), xycoords='data', xytext=(+30, -30), textcoords='offset points', fontsize=16, arrowprops=dict(arrowstyle='->', connectionstyle='arc3,rad=.2')) plt.show()
3. 設(shè)置文本內(nèi)容
有時候想在圖像上設(shè)置一行文字的內(nèi)容,這時候調(diào)用的函數(shù)如下:
plt.text(x, y, s) # x,y為文字位置 # s為文字內(nèi)容
plt.text(-3.7, 3, r'$This\ is\ the\ some\ text.\ \mu\ \sigma_i\ \alpha_t$', fontdict={'size': 16, 'color': 'r'})
繪制結(jié)果如下:
總結(jié)
以上即為python使用matplotlib繪制二維坐標軸,設(shè)置箭頭指向,文本內(nèi)容的知識。
僅為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Django使用paginator插件實現(xiàn)翻頁功能的實例
今天小編就為大家分享一篇關(guān)于Django使用paginator插件實現(xiàn)翻頁功能的實例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-10-10pycharm創(chuàng)建scrapy項目教程及遇到的坑解析
這篇文章主要介紹了pycharm創(chuàng)建scrapy項目教程及遇到的坑解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-08-08Python使用multiprocessing如何實現(xiàn)多進程
這篇文章主要介紹了Python使用multiprocessing如何實現(xiàn)多進程問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-02-02Pytorch中實現(xiàn)只導入部分模型參數(shù)的方式
今天小編就為大家分享一篇Pytorch中實現(xiàn)只導入部分模型參數(shù)的方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01詳解numpy矩陣的創(chuàng)建與數(shù)據(jù)類型
這篇文章主要介紹了詳解numpy矩陣的創(chuàng)建與數(shù)據(jù)類型,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-10-10