日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Python新手繪圖繞不開的17個小問題,學完超過70%的人

 常有理 2019-05-23

Python新手繪圖繞不開的17個小問題,學完超過70%的人

1 關于安裝

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

答:Python常用的繪圖庫有:

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

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

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

筆者常用matplotlib和basemap庫,下一步打算學習和使用seaborn庫。

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

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

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

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

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


2 與其他工具對比

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

問3.2:從Matlab畫圖轉向Python畫圖是否容易?

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

當前新版本的 Matlab 安裝包接近 10G??!安裝后占用空間更大?。?!且正版軟件價格不菲。

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

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

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

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

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

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


3 基本操作

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

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

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

問6:如何批量進行成圖處理?

答:假定已經寫好了讀文件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支持導出emf,eps,pdf,png,ps,raw,rgba,svg,svgz圖片格式。安裝Pillow庫之后,matplotlib可以自動調用Pillow支持導出bmp、eps、gif、jpeg、jpg、tiff等多種格式。

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

答:方便。一個例子如下:

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個小問題,學完超過70%的人

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

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

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

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


4 高級操作

問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個小問題,學完超過70%的人

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

答:在保存圖片 savefig() 時的參數(shù)中添加 bboxinches = 'tight',就可以去除因為畫幅過大導致圖片上下左右的白邊。plt.savefig(‘mypic.jpg’, dpi=360, bboxinches='tight')。

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

問12:多副子圖如何共用x/y坐標軸?

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

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

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

問14:x坐標軸如何顯示時間?

答:具體例子如下:

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個小問題,學完超過70%的人

5 其他

問15:推薦哪些網站和資料?

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

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

答:簡單總結下,Python畫圖優(yōu)點有:

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

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

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

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

Python新手繪圖繞不開的17個小問題,學完超過70%的人

Python新手繪圖繞不開的17個小問題,學完超過70%的人

Python新手繪圖繞不開的17個小問題,學完超過70%的人

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多