乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Python新手繪圖繞不開的17個(gè)小問題,學(xué)完超過70%的人

       常有理 2019-05-23

      Python新手繪圖繞不開的17個(gè)小問題,學(xué)完超過70%的人

      1 關(guān)于安裝

      問1:Python畫圖用到哪些庫?

      答:Python常用的繪圖庫有:

      matplotlib,是最經(jīng)典的Python可視化繪圖庫。matplotlib就是MATLAB+Plot+Library,即模仿Matlab的繪圖庫,其繪圖風(fēng)格與Matlab類似。

      seaborn,是基于matplotlib的,純粹由Python開發(fā)的圖形可視化庫,在matplotlib的基礎(chǔ)上進(jìn)行了更高級(jí)的API封裝,從而使得作圖更加容易。'make a well-defined set of hard things easy',“默認(rèn)情況下就能創(chuàng)建賞心悅目的圖表”。

      basemap,Python的basemap庫負(fù)責(zé)實(shí)現(xiàn)地理信息可視化,其功能之強(qiáng)大較GMT有過之而無不及。其底圖數(shù)據(jù)庫與GMT相同,封裝了大量常用的地圖投影、坐標(biāo)轉(zhuǎn)換功能,利用簡(jiǎn)潔的Python語法支持繪出多種多樣的地理地圖。

      筆者常用matplotlib和basemap庫,下一步打算學(xué)習(xí)和使用seaborn庫。

      問2:Python繪圖庫大不大?這些庫能在哪里找?安裝是否麻煩?

      答:以上繪圖庫安裝包大小在100M以內(nèi)。安裝及卸載十分簡(jiǎn)單。大部分庫支持在線安裝。

      控制臺(tái)使用pip install matplotlib命令即可安裝matplotlib庫。安裝之前需要先安裝numpy,dateutil模塊,安裝命令分別為pip install numpy / pip install python-dateutil。此外,安裝Pillow庫,可以支持導(dǎo)出更多的如JPEG、BMP、TIFF等更多圖片格式。

      seaborn的安裝同matplotlib,pip install seaborn。其依賴庫包括numpy,scipy,matplotlib,pandas。

      basemap的安裝略微不同。(Windows用戶)需要到https://www.lfd./~gohlke/pythonlibs/ 下載對(duì)應(yīng)的wheel文件到本地,然后控制臺(tái)進(jìn)入其所在目錄,使用pip install xxxx.whl安裝。其依賴于pyproj庫。具體安裝過程參考 https://zhuanlan.zhihu.com/p/34509847


      2 與其他工具對(duì)比

      問3.1:任何Matlab能畫的圖Python都能畫嗎?

      問3.2:從Matlab畫圖轉(zhuǎn)向Python畫圖是否容易?

      答:由于 matplotlib 使用的大部分函數(shù)都與 Matlab 中對(duì)應(yīng)的函數(shù)同名,且各種參數(shù)的含義,使用方法也一致,這就使得熟悉 Matlab 的用戶使用起來感到得心應(yīng)手。對(duì)那些不熟悉的 Matlab 的用戶而言,這些函數(shù)的意義往往也是一目了然的,因此只要花很少的時(shí)間就可以掌握。

      當(dāng)前新版本的 Matlab 安裝包接近 10G!!安裝后占用空間更大?。。∏艺孳浖r(jià)格不菲。

      Python的各個(gè)庫類似積木的基本單位,可以隨意組合。在 Python 基本模塊外擴(kuò)展畫圖功能只需安裝 matplotlib 和numpy、pillow等幾個(gè)依賴庫。繪圖包本身大小僅有幾十M,安裝后占用空間幾百M(fèi),安裝和卸載都十分方便。另外,Python 繪圖庫開源而且免費(fèi)。

      筆者曾分別或同時(shí)使用過Excel、Matlab、Origin、GMT畫過圖?,F(xiàn)在只使用Python可以取代上面所有軟件畫圖。

      問4.1:能否像Matlab一樣拖入文件右鍵plot就能畫?

      問4.2:Python 畫圖后微調(diào)是否需要慢慢修改代碼,是否具有Matlab那種直接在圖上操作的功能?

      答:matplotlib和basemap庫需要通過代碼讀取數(shù)據(jù)繪圖,暫不支持直接拖入數(shù)據(jù)右鍵繪圖,或在圖上直接操作的功能。不確定其他庫,或者未來是否會(huì)出現(xiàn)新的擴(kuò)展庫支持這些操作。這或許是Python畫圖相對(duì)Matlab的一個(gè)小缺點(diǎn)。

      不過格式整齊的文本數(shù)據(jù)使用numpy.loadtxt函數(shù),1-2行代碼即可提取出所需數(shù)據(jù)。Python也支持對(duì)csv、excel格式數(shù)據(jù)的快速讀取。微調(diào)繪圖結(jié)果可通過改變代碼很快設(shè)置完成。對(duì)筆者來說,上面兩個(gè)問題幾乎可以忽略。


      3 基本操作

      問5:Python畫圖代碼的可讀性如何,圖形種類多不多?

      答:引用一個(gè)說法,Python的哲學(xué)就是“優(yōu)雅”、“明確”、“簡(jiǎn)單”,盡量寫容易看明白的代碼,盡量寫少的代碼。這是Python的定位,使得Python程序看上去簡(jiǎn)單易懂,初學(xué)者容易入門,學(xué)習(xí)成本更低。

      以最常用的matplotlib庫為例,Python可以繪制多種形式,包括普通的點(diǎn)線圖,柱狀圖、直方圖,餅圖,功率譜圖,極坐標(biāo)圖以及誤差線圖等。參考matplotlib的官方網(wǎng)站https:///index.html,在其examples頁面,給出了上百個(gè)常用的繪圖腳本及成圖樣例。

      問6:如何批量進(jìn)行成圖處理?

      答:假定已經(jīng)寫好了讀文件A畫A.jpg的函數(shù)。得到所有待繪圖文件A,B,C,的路徑后,通過for循環(huán)即可批量成圖。例如:

      import

      os

      names = os.listdir(mydir)

      for

      nm

      in

      names:

      if

      not

      nm.endswith(

      '.txt'

      ):

      continue

      pth = os.path.join(mydir, nm)

      draw_1_txt(pth)

      問7:Python的圖片如何保存為jpg,bmp,tif等常見格式?

      答:matplotlib支持導(dǎo)出emf,eps,pdf,png,ps,raw,rgba,svg,svgz圖片格式。安裝Pillow庫之后,matplotlib可以自動(dòng)調(diào)用Pillow支持導(dǎo)出bmp、eps、gif、jpeg、jpg、tiff等多種格式。

      問8:是否方便畫雙y軸,設(shè)置雙軸顏色?

      答:方便。一個(gè)例子如下:

      import

      numpy

      as

      np

      import

      matplotlib.pyplot

      as

      plt

      # Create some mock data

      t = np.arange(

      0.01

      ,

      10.0

      ,

      0.01

      )

      data1 = np.exp(t)

      data2 = np.sin(

      2

      * np.pi * t)

      fig, ax1 = plt.subplots(figsize=(

      5

      ,

      3

      ))

      color =

      'tab:red'

      ax1.set_xlabel(

      'time (s)'

      )

      ax1.set_ylabel(

      'exp'

      , color=color)

      ax1.plot(t, data1, color=color)

      ax1.tick_params(axis=

      'y'

      , labelcolor=color)

      ax2 = ax1.twinx()

      # instantiate a second axes that shares the same x-axis

      color =

      'tab:blue'

      ax2.set_ylabel(

      'sin'

      , color=color)

      # we already handled the x-label with ax1

      ax2.plot(t, data2, color=color)

      ax2.tick_params(axis=

      'y'

      , labelcolor=color)

      fig.tight_layout()

      # otherwise the right y-label is slightly clipped

      plt.show()

      Python新手繪圖繞不開的17個(gè)小問題,學(xué)完超過70%的人

      可以看到,ax2=ax1.twinx()語句可以獲取第二個(gè)y軸元素。對(duì)于軸線屬性如label顏色、大小,tick的間隔,文字,顏色等的設(shè)置都可以通過相應(yīng)的成員函數(shù)實(shí)現(xiàn)。

      問9.1:圖片清晰度和分辨率是否能自己控制?

      問9.2:如何設(shè)置圖片分辨率,dpi等參數(shù)?

      答:配合設(shè)置figsize和dpi這兩個(gè)參數(shù)調(diào)整圖片像素和分辨率。 通過figsize參數(shù)設(shè)置畫幅大小,單位為英寸:plt.figure(figsize=(8,4)) savefig保存圖片時(shí)可通過可選參數(shù)dpi設(shè)置。有的期刊網(wǎng)站要求dpi不低于300。


      4 高級(jí)操作

      問10:如何用Python畫世界地圖?

      from

      mpl_toolkits.basemap

      import

      Basemap

      import

      numpy

      as

      np

      import

      matplotlib.pyplot

      as

      plt

      # lon_0 is central longitude of projection.

      # resolution = 'c' means use crude resolution coastlines.

      f = plt.figure(figsize=(

      8

      ,

      4

      ))

      m =

      Basemap

      (projection=

      'robin'

      ,lon_0=

      0

      ,resolution=

      'c'

      )

      m.shadedrelief(scale=

      0.2

      )

      plt.title(

      'Robinson Projection'

      )

      plt.show()

      Python新手繪圖繞不開的17個(gè)小問題,學(xué)完超過70%的人

      問11:圖片如何裁去多余的白邊?

      答:在保存圖片 savefig() 時(shí)的參數(shù)中添加 bboxinches = 'tight',就可以去除因?yàn)楫嫹^大導(dǎo)致圖片上下左右的白邊。plt.savefig(‘mypic.jpg’, dpi=360, bboxinches='tight')。

      另一個(gè)可以自動(dòng)調(diào)整繪圖區(qū)排列的函數(shù)是tight_layout(),主要用于自動(dòng)調(diào)整繪圖區(qū)的大小及間距,使所有的繪圖區(qū)及其標(biāo)題、坐標(biāo)軸標(biāo)簽等都可以協(xié)調(diào)、完整地顯示在畫布上。例如可以避免當(dāng)繪圖區(qū)的X/Y軸的標(biāo)簽,以及標(biāo)題的字體非常大,導(dǎo)致這些文字不能完整顯示出來。也可以避免創(chuàng)建了多個(gè)繪圖區(qū),繪圖區(qū)之間有部分重疊的問題。

      問12:多副子圖如何共用x/y坐標(biāo)軸?

      答:多副子圖共用坐標(biāo)軸用sharex/sharey參數(shù)。如 fig, axs = plt.subplots(1, 3, sharey=True, figsize=(10, 3.5)) 表示從左至右三幅子圖共用y軸,只會(huì)在左子圖上繪制y軸。

      問13:怎么樣調(diào)節(jié)子圖之間的水平/垂直間隔?

      答:接上面的例子,加入代碼 fig.subplots_adjust(wspace=0.05) 可以調(diào)整三幅子圖的水平間隔。垂直間隔設(shè)置hspace參數(shù)。

      問14:x坐標(biāo)軸如何顯示時(shí)間?

      答:具體例子如下:

      import

      matplotlib.dates

      as

      mdates

      from

      matplotlib.pylab

      import

      date2num

      import

      datetime

      tmFmt = mdates.

      DateFormatter

      (

      '%H:%M:%S'

      )

      def

      draw_fig_xaxis_time():

      ...

      tmfl = date2num(time_lst)

      plt.plot(time_lst, y_lst)

      ax = plt.subplot(

      111

      )

      ax.xaxis.set_major_formatter(tmFmt)

      ax.set_xlim(min(tmfl)-

      0.0001

      , max(tmfl)+

      0.0001

      )

      ...

      Python新手繪圖繞不開的17個(gè)小問題,學(xué)完超過70%的人

      5 其他

      問15:推薦哪些網(wǎng)站和資料?

      答:首推matplotlib的官方網(wǎng)站https:///index.html,在其examples頁面,給出了上百個(gè)常用的繪圖腳本及成圖樣例。 其次,多用搜索引擎Google,99.9%的畫圖問題都可以在里面找到答案。

      問16:Python畫圖的優(yōu)點(diǎn)?

      答:簡(jiǎn)單總結(jié)下,Python畫圖優(yōu)點(diǎn)有:

      1. 腳本語法簡(jiǎn)單,很容易理解、上手;
      2. 跨平臺(tái)(Win/Linux/Mac),開源;
      3. 安裝簡(jiǎn)單,占用空間很小;
      4. 封裝了一些“高級(jí)”屬性/函數(shù),比如支持設(shè)置dpi;支持去除圖片白邊;支持自動(dòng)調(diào)整多子圖的間隔......
      5. 使用人數(shù)眾多,社區(qū)活躍。2018年末 Python 在 TIOBE 排行榜中排行第三,是僅次于Java、C,排名最高的解釋型語言,并被評(píng)選為2018年年度編程語言。

      問17:Python畫圖有什么缺陷?

      答:個(gè)人覺得以下方面還可以繼續(xù)改進(jìn):

      1. 在腳本操作之外,可以增加輔助的圖形化操作,支持類似Excel或Matlab的,文件即托即畫功能;
      2. 成圖show之后,支持在圖片上直接對(duì)軸線、線條、title等進(jìn)行編輯;
      3. 簡(jiǎn)化basemap庫安裝過程。增加GMT畫世界地圖的黑白間隔邊框效果。

      Python新手繪圖繞不開的17個(gè)小問題,學(xué)完超過70%的人

      Python新手繪圖繞不開的17個(gè)小問題,學(xué)完超過70%的人

      Python新手繪圖繞不開的17個(gè)小問題,學(xué)完超過70%的人

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多