Python 數(shù)據(jù)科學(xué)入門:Matplotlib 基本的自定義
在 Matplotlib 教程中,我們將討論一些可能的圖表自定義。 為了開始修改子圖,我們必須定義它們。 我們很快會談?wù)撍麄?,但有兩種定義并構(gòu)造子圖的主要方法。 現(xiàn)在,我們只使用其中一個,但我們會很快解釋它們。
現(xiàn)在,修改我們的graph_data函數(shù):
- def graph_data(stock):
- fig = plt.figure()
- ax1 = plt.subplot2grid((1,1), (0,0))1234
為了修改圖表,我們需要引用它,所以我們將它存儲到變量fig。 然后我們將ax1定義為圖表上的子圖。 我們在這里使用subplot2grid,這是獲取子圖的兩種主要方法之一。 我們將深入討論這些東西,但現(xiàn)在,你應(yīng)該看到我們有 2 個元組,它們提供了(1,1)和(0,0)。 1,1表明這是一個 1×1 網(wǎng)格。 然后0,0表明這個子圖的『起點(diǎn)』將為0,0。
接下來,通過我們已經(jīng)編寫的代碼來獲取和解析數(shù)據(jù):
- 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
下面,我們這樣繪制數(shù)據(jù):
- ax1.plot_date(date, closep,'-', label='Price')1
現(xiàn)在,由于我們正在繪制日期,我們可能會發(fā)現(xiàn),如果我們放大,日期會在水平方向上移動。但是,我們可以自定義這些刻度標(biāo)簽,像這樣:
- for label in ax1.xaxis.get_ticklabels():
- label.set_rotation(45)12
這將使標(biāo)簽轉(zhuǎn)動到對角線方向。 接下來,我們可以添加一個網(wǎng)格:
- ax1.grid(True)1
然后,其它東西我們保留默認(rèn),但我們也可能需要略微調(diào)整繪圖,因為日期跑到了圖表外面。 記不記得我們在第一篇教程中討論的configure subplots按鈕? 我們不僅可以以這種方式配置圖表,我們還可以在代碼中配置它們,以下是我們設(shè)置這些參數(shù)的方式:
- plt.subplots_adjust(left=0.09, bottom=0.20, right=0.94, top=0.90, wspace=0.2, hspace=0)1
現(xiàn)在,為了防止我們把你遺留在某個地方,這里是完整的代碼:
- 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
結(jié)果為:
