1. 程式人生 > >the Blog of Dale無雙

the Blog of Dale無雙

前言

發現Python中有很多值得研究的問題,但是時間不太多。所以就在這裡簡要記錄一下。

1 python的編碼解碼

Since Python 3.0, strings are stored as Unicode, i.e. each character in the string is represented by a code point. So, each string is just a sequence of Unicode code points.

告訴我們python裡面的字串預設都是Unicode編碼格式。

For efficient storage of these strings, the sequence of code points are converted into set of bytes. The process is known as encoding.


There are various encodings present which treats a string differently. The popular encodings being utf-8, ascii, etc.


Using string’s encode() method, you can convert unicoded strings into any encodings supported by Python. By default, Python uses utf-8 encoding.

#coding:utf-8
import chardet
 
for i in ['abc123','中國']:
    print i,chardet.detect(i)

2 python中的\ (反斜槓)

在這裡插入圖片描述

很經典。

3 basemap 引數

看不懂英文可以直接複製到谷歌翻譯中,很準。

比如resolution 引數:
在這裡插入圖片描述

lat_0: center of desired map domain (in degrees).
lon_0: center of desired map domain (in degrees).
在這裡插入圖片描述

裡面有一句很重要的話:

Calling a Basemap class instance with the arguments lon, lat will convert lon/lat (in degrees) to x/y map projection coordinates (in meters). If optional keyword inverse is True (default is False), the inverse transformation from x/y to lon/lat is performed.

意思就是:在呼叫 Basemap() 例項化一個Basemap物件之後,再calling 這個物件 with the arguments:lon和lat (單位是度°),分別轉成成地圖投影上的座標 x和y (單位是米m)

我想這個就是以下程式碼片段這樣寫的原因:

map = Basemap(projection='robin', lon_0=0, resolution='c')  
# 北京的緯度和經度
latitudeBeijing  = 39.91
longitudeBeijing = 116.39
# 將經緯度轉換為影象中的位置(注意引數分別是經度、緯度)
x, y = map(longitudeBeijing, latitudeBeijing)

4 讓你設定的環境變數立刻生效(無須登出或重啟)

這個確實有意思。
我之前設定了一個PROJ_LIB變數,但是我重啟spyder之後還是不行。
然後我在cmd中 echo %PROJ_LIB%
之後關閉spyder再開啟,就不會報錯了,很有意思。

5 pyplot中的figure和subplot函式

這裡講述了在python下用pyplot畫出四個子圖的各種方式,很有意思:

1)直接使用subplots函式定義四個子圖

import matplotlib.pyplot as plt

x = range(10)
y = range(10)

fig, ax = plt.subplots(nrows=2, ncols=2)  # nrows和ncols是subplots函式的引數,表明幾行幾列

for row in ax:
    for col in row:
        col.plot(x, y)

plt.show()

在這裡插入圖片描述

2)使用subplot函式分別定義子圖(有點像MATLAB)

fig = plt.figure()

plt.subplot(2, 2, 1)
plt.plot(x, y)

plt.subplot(2, 2, 2)
plt.plot(x, y)

plt.subplot(2, 2, 3)
plt.plot(x, y)

plt.subplot(2, 2, 4)
plt.plot(x, y)

plt.show()

3)

import matplotlib.pyplot as plt

fig = plt.figure()
axes = fig.subplots(nrows=2, ncols=2)

plt.show()

4)

import matplotlib.pyplot as plt

fig, ax = plt.subplots(2, 2)

ax[0, 0].plot(range(10), 'r') #row=0, col=0
ax[1, 0].plot(range(10), 'b') #row=1, col=0
ax[0, 1].plot(range(10), 'g') #row=0, col=1
ax[1, 1].plot(range(10), 'k') #row=1, col=1
plt.show()

5)

import matplotlib.pyplot as plt
fig, (ax1, ax2, ax3, ax4) = plt.subplots(2, 2, sharex=True, sharey=True)
ax1.plot(range(10), 'r')
ax2.plot(range(10), 'b')
ax3.plot(range(10), 'g')
ax4.plot(range(10), 'k')
plt.show()

注意:
參考:[5.2] https://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.subplots
subplots函式全名叫做:
matplotlib.pyplot.subplots( nrows=1, ncols=1, sharex=False, sharey=False, squeeze=True, subplot_kw=None, gridspec_kw=None, **fig_kw )

裡面很多引數都是預設的。
該函式返回兩個值:
在這裡插入圖片描述

其中,fig表示figure,ax表示axes(是axis的複數形式,如下。是座標軸的意思)。
在這裡插入圖片描述

對於figure,這裡是figure函式的操作:
在這裡插入圖片描述

6 anaconda 下安裝ffmpeg

直接在navigator裡面搜尋安裝即可。

在這裡插入圖片描述

然而,,,似乎這並不是python裡面的一個模組,而是系統的一個軟體,所以我在spyder裡面
import ffmpeg
結果是:
在這裡插入圖片描述

但是開啟cmd,輸入ffmpeg -version,卻能夠看到相應的版本資訊:
在這裡插入圖片描述

很神奇。

7. Spyder程式碼補全設定

1)toors->preferences->IPython console->advanced Settings 選中Use the greedy completer
2)也是在這個greedy completer的下面,Autocall調至Full

8. 怎麼利用Basemap畫出地球,並顯示首都北京

from mpl_toolkits.basemap import Basemap 
import matplotlib.pyplot as plt # 先要import進來

map = Basemap(projection='robin', lon_0=0, resolution='c')   #構件Basemap物件例項
map.drawcoastlines(linewidth=0.25)               #繪製海岸線
map.drawcountries(linewidth=0.25)                #繪製國界線
map.drawmapboundary(fill_color=(0.8, 0.95, 1.0)) #draw map boundary 畫出地圖邊界,並填充背景(海洋)
map.fillcontinents(color=(1,0.9,0.7),lake_color=(0.8, 0.95, 1.0),zorder=0) # 明確大陸和湖泊的顏色

x, y = map(116.39, 39.91) # 將北京所在的經度(前者)和緯度(後者),轉化為map中的座標。

#用點和圈標出北京
map.scatter(x, y, s = 10, marker='o', color='r') # 繪製實心紅點
map.scatter(x, y, s = 60, marker='o', color='None', edgecolor='r') # 空心紅圈

plt.text(x, y, '北京', color = 'b', fontsize=10)  # 標記“北京”

plt.show()

但是這個時候並不能顯示“北京”這兩個中文字元(變成了方框)。

在這裡插入圖片描述

即在程式的開頭加上以下幾行:

from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['kaiti'] # 指定字型為楷體

在執行即可成功顯示“北京”。

9. python 的 FuncAnimation函式