Python 數據科學入門10:基本的自定義

在 Matplotlib 教程中,我們將討論一些可能的圖表自定義。 為了開始修改子圖,我們必須定義它們。 我們很快會談論他們,但有兩種定義並構造子圖的主要方法。 現在,我們只使用其中一個,但我們會很快解釋它們。

現在,修改我們的graph_data函數:

<code>def graph_data(stock):

fig = plt.figure()
ax1 = plt.subplot2grid((1,1), (0,0))1234/<code>

為了修改圖表,我們需要引用它,所以我們將它存儲到變量fig。 然後我們將ax1定義為圖表上的子圖。 我們在這裡使用subplot2grid,這是獲取子圖的兩種主要方法之一。 我們將深入討論這些東西,但現在,你應該看到我們有 2 個元組,它們提供了(1,1)和(0,0)。 1,1表明這是一個 1×1 網格。 然後0,0表明這個子圖的『起點』將為0,0。

接下來,通過我們已經編寫的代碼來獲取和解析數據:

<code>stock_price_url = 'http://chartapi.finance.yahoo.com/instrument/1.0/'+stock+'/chartdata;type=quote;range=10y/csv'
source_code = urllib.request.urlopen(stock_price_url).read().decode()
stock_data = []
split_source = source_code.split('\\n')
for line in split_source:
split_line = line.split(',')
if len(split_line) == 6:
if 'values' not in line and 'labels' not in line:
stock_data.append(line)

date, closep, highp, lowp, openp, volume = np.loadtxt(stock_data,
delimiter=',',
unpack=True,
converters={0: bytespdate2num('%Y%m%d')})1234567891011121314/<code>

下面,我們這樣繪製數據:

<code>ax1.plot_date(date, closep,'-', label='Price')1/<code>

現在,由於我們正在繪製日期,我們可能會發現,如果我們放大,日期會在水平方向上移動。但是,我們可以自定義這些刻度標籤,像這樣:

<code>for label in ax1.xaxis.get_ticklabels():
label.set_rotation(45)12/<code>

這將使標籤轉動到對角線方向。 接下來,我們可以添加一個網格:

<code>ax1.grid(True)1/<code>

然後,其它東西我們保留默認,但我們也可能需要略微調整繪圖,因為日期跑到了圖表外面。 記不記得我們在第一篇教程中討論的configure subplots按鈕? 我們不僅可以以這種方式配置圖表,我們還可以在代碼中配置它們,以下是我們設置這些參數的方式:

<code>plt.subplots_adjust(left=0.09, bottom=0.20, right=0.94, top=0.90, wspace=0.2, hspace=0)1/<code>

現在,為了防止我們把你遺留在某個地方,這裡是完整的代碼:

<code>import matplotlib.pyplot as plt
import numpy as np
import urllib
import matplotlib.dates as mdates

def bytespdate2num(fmt, encoding='utf-8'):
strconverter = mdates.strpdate2num(fmt)
def bytesconverter(b):
s = b.decode(encoding)
return strconverter(s)
return bytesconverter


def graph_data(stock):

fig = plt.figure()
ax1 = plt.subplot2grid((1,1), (0,0))

stock_price_url = 'http://chartapi.finance.yahoo.com/instrument/1.0/'+stock+'/chartdata;type=quote;range=10y/csv'
source_code = urllib.request.urlopen(stock_price_url).read().decode()

stock_data = []
split_source = source_code.split('\\n')
for line in split_source:
split_line = line.split(',')
if len(split_line) == 6:
if 'values' not in line and 'labels' not in line:
stock_data.append(line)

date, closep, highp, lowp, openp, volume = np.loadtxt(stock_data,
delimiter=',',
unpack=True,
converters={0: bytespdate2num('%Y%m%d')})

ax1.plot_date(date, closep,'-', label='Price')
for label in ax1.xaxis.get_ticklabels():
label.set_rotation(45)
ax1.grid(True)#, color='g', linestyle='-', linewidth=5)

plt.xlabel('Date')
plt.ylabel('Price')
plt.title('Interesting Graph\\nCheck it out')
plt.legend()
plt.subplots_adjust(left=0.09, bottom=0.20, right=0.94, top=0.90, wspace=0.2, hspace=0)
plt.show()


graph_data('TSLA')1234567891011121314151617181920212223242526272829303132333435363738394041424344454647/<code>

結果為:

Python 數據科學入門10:基本的自定義


分享到:


相關文章: