獲取資料
以從Tushare獲取到的伯特利(‘603596.SH’)的行情資料為例:
import tushare as ts
import pandas as pd
import matplotlib.pyplot as plt
token = 'Your token' # 這里,需要輸入你的介面密匙,
pro = ts.pro_api(token)
df = pro.daily(ts_code='603596.SH') # 獲取日行情的介面,
df1 = df.loc[:, ['trade_date', 'open', 'high', 'low', 'close']]
df1.rename(
columns={
'trade_date': 'Date', 'open': 'Open',
'high': 'High', 'low': 'Low',
'close': 'Close'},
inplace=True)
df1['Date'] = pd.to_datetime(df1['Date'])
# 將日期列作為行索引
df1.set_index(['Date'], inplace=True)
df1 = df1.sort_index()
Close = df1.Close[-50:] # 取近50天的價格資料作為示例
1. 柱狀圖(Bar charts)
- 柱狀圖主要用于表示定性資料的頻數分布,能夠直觀地展現變數的分布情況,一般情況下,柱狀圖的X軸表示定性變數的各個取值,Y軸則表示各個取值的頻數,
1.1 先簡要分析一下資料
- 繪制柱狀圖前,可以先簡要分析一下資料的最大值,最小值,中位數,平均數等資訊,這些資訊可以通過呼叫describe()函式獲得,
Close.describe()

1.2 使用bar()函式繪制基本柱狀圖
- pyplot包中的bar()函式可以用于繪制柱狀圖:
- matplotlib.pyplot.bar(x, height, width=0.8, hold=None, data=None, **kwargs)
# 首先生成頻數串列
a = [0, 0, 0, 0]
for i in Close:
if (i>24)&(i<=28):
a[0] += 1
elif (i>28)&(i<=32):
a[1] += 1
elif (i>32)&(i<=36):
a[2] += 1
else:
a[3] += 1
# 查看一下a

# 繪制柱狀圖
plt.bar(['(24,28]', '(28, 32]', '(32, 36]', '(36, 40]'], a)
效果如圖所示:

1.3 設定位置與大小
left和height分別用于設定每根棒的X軸位置和高度
width引數用于調節棒的寬度
bottom用于設定棒底部的Y軸坐標,即不一定緊貼X軸,可以設成“凌空”位置,
示例如下:
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.bar(x=['(24,28]', '(28, 32]', '(32, 36]', '(36, 40]'], \
height=a, width=1.0, bottom=5.0)
plt.title('伯特利近50天收盤價分布柱狀圖')
效果如圖所示:

1.4 設定顏色
- 棒的顏色用color引數設定,棒的邊沿顏色用edgecolor引數設定,
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.bar(x=['(24,28]', '(28, 32]', '(32, 36]', '(36, 40]'], \
height=a, width=1.0, bottom=5.0, color='red',edgecolor='k')
plt.title('伯特利近50天收盤價分布柱狀圖')
效果如圖所示:

1.5 繪制水平柱狀圖
繪制水平柱狀圖可以使用barh()函式,barh()函式的引數形式如下:
matplotlib.pyplot.barh(y, width,height=0.8, left=None, hold=None, **kwargs)
- y設定棒在y軸的位置,
- width設定棒的寬度,即一般設定為定性資料的值,
- height設定棒的豎直高度
- 代碼示例如下:
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.barh(['(24,28]', '(28, 32]', '(32, 36]', '(36, 40]'], a, height=1.0, color='red',edgecolor='k')
plt.title('伯特利近50天收盤價分布柱狀圖')
效果如圖所示:

2. 直方圖
- 柱形圖主要用于展示定性資料的分布,對于定量資料的分布,一般使用直方圖來呈現,pyplot包中的**hist()**函式用于繪制直方圖,
2.1 使用hist()函式繪制直方圖
代碼示例:
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.hist(Close,bins=12)
plt.title('伯特利近50天收盤價分布直方圖')
效果如圖所示:

2.2 hist()引數形式
matplotlib.pyplot.hist(x,bins=10,range=None,\
normed=False, weights=None, cumulatives=False,\
bottom=None, histtype='bar', \
orientation='vertical', **kwargs)
將orientation設定為’horizontal’,可以繪制水平直方圖,
通過color引數設定顏色
通過edgecolor設定邊沿顏色
代碼示例如下:
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.hist(Close, range=(25,40), orientation='horizontal', \
color='red', edgecolor='blue')
plt.title('伯特利近50天收盤價分布直方圖')
效果如圖所示:

2.3 累積分布直方圖
只需將cumulative引數設定為True即可,
此外,引數histtype設定直方圖的型別,改引數可以的取值有bar,barstacked,step或stepfilled,分別表示直方圖,對堆疊圖,無填充的線圖和有填充的線圖四種,
- 繪制累計分布直方圖代碼示例如下:
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.hist(Close, range=(25,40), orientation='vertical', \
cumulative=True, histtype='stepfilled', color='red', edgecolor='blue')
plt.title('伯特利近50天收盤價累積分布直方圖')
效果如圖所示:

3. 餅圖(Pie Plot)
- 餅圖能夠很方便地表現出每一部分占總體的比例,餅圖用**pie()**函式繪制,該函式的主要形式如下:
- matplotlib.pyplot.pie(x, labels=None, color=None, shadow=False)
- labels: 用于設定扇形圖的標簽,為字串序列型別,
- colors:用于設定扇形圖的顏色,為字串序列型別,
- shadow:用于設定是否有陰影,取值為True或False,默認為False,
- 繪制餅圖示例:
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.pie(a, labels=['(24,28]', '(28, 32]', '(32, 36]', '(36, 40]'], colors=('b', 'g', 'r', 'c'), shadow=True)
plt.title('伯特利近50天收盤價分布餅狀圖')
效果如圖所示:

4.箱形圖(Box Plot)(也稱“箱線圖”)
4.1 簡況
- 箱線圖由一個矩形和兩條線組成,矩形的上邊和下邊分別是變數的上四分位數和下四分位數;中間有一條線用來表示變數的中位數,在矩形的上下邊各延伸出一條線,每條線的長度一般為1.5倍四分位距(四分位距即上下四分位數之差),這兩條先被視為例外值的截斷線,上端的線為上邊緣線,下端的線為下邊緣線,線外的點一般被認為是例外值,
- 箱線圖能夠很直觀地表現出一個變數的分布,也有助于檢測例外值,
4.2 boxplot()函式
使用pyplot中的boxplot函式繪制箱形圖,該函式主要形式為:
- matplotlib.pyplot.boxplot(x,notch=None, labels=None)
引數x:要繪制的圖形資料,可以是陣列形式,也可以是多個向量序列,
引數notch:箱線圖的型別,為布爾型別,默認為False,表示繪制矩形箱(rectangular box);如果取值為True,則表示繪制鋸齒狀箱形圖(notched box),
引數labels:表示箱形圖的標簽,一般為字串序列型別,
代碼示例如下:
plt.rcParams['font.sans-serif'] = ['SimHei']
import numpy as np
data=np.array(df1)
plt.boxplot(data,labels=('Open', 'High', 'Low', 'Close'))
plt.title("伯特利股價箱線圖")
效果如圖所示:

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/278578.html
標籤:python
上一篇:經常打游戲、刷視頻,卻不了解它們底層的通信機制嗎?來我給你聊清楚Python Socket通信原理
下一篇:arduino與淘晶馳串口通信
