中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
機(jī)器學(xué)習(xí)繪圖神器Matplotlib首秀!

Matplotlib是一個(gè)非常經(jīng)典的繪圖庫,甚至有人將numpy+pandas+matplotlib稱之為數(shù)據(jù)分析三劍客,足以說明這個(gè)庫的重要性。雖然Peter鐘情于Plotly,但掌握Matplotlib繪制技巧也非常重要。

基于Matplotlib的繪圖技巧太多了,想深入學(xué)習(xí)的小伙伴建議直接官網(wǎng):https://matplotlib.org/

從本文中你將學(xué)習(xí)到以下幾點(diǎn):

  • 基本圖形繪制:折線圖、柱狀圖、直方圖、雙軸線圖等
  • 繪制小技巧:添加圖例、標(biāo)題、注釋、顏色等
  • 實(shí)戰(zhàn):股票趨勢(shì)圖和K線圖制作

導(dǎo)入庫

一般繪圖的時(shí)候需要導(dǎo)入常見的庫;在使用matplotlib繪制的時(shí)候還需要解決中文的問題

import pandas as pd
import numpy as np

import matplotlib.pyplot as plt
%matplotlib inline

# 用來正常顯示中文標(biāo)簽
plt.rcParams['font.sans-serif'] = ['SimHei']  
# 解決負(fù)號(hào)“-”顯示為
plt.rcParams['axes.unicode_minus'] = False  

折線圖

x = [2,3,4]
y = [4,6,8]

plt.plot(x,y)
plt.show()

多折線圖

# 默認(rèn)參數(shù)
x1 = np.array([1,3,5])
y1 = x1 + 4
plt.plot(x1,y1)

# 第二條紅線
y2 = x1 * 2
plt.plot(x1,y2,color='red',linewidth=3,linestyle='--')
plt.show()

柱狀圖

x = [2,3,4,5,6]
y = [4,6,8,10,12]

plt.bar(x,y)
plt.show()

散點(diǎn)圖

x = np.random.rand(20)  # 0-1之間的20個(gè)隨機(jī)數(shù)
y = np.random.rand(20)

plt.scatter(x,y)
plt.show()

直方圖

# 隨機(jī)生成1000個(gè)服從正態(tài)分布的數(shù)據(jù),均值為0,標(biāo)準(zhǔn)差為1
data = np.random.randn(1000)

plt.hist(data, bins=40, edgecolor='black')
plt.show()

頻率直方圖

主要是y軸發(fā)生了變化,全部是小數(shù)表示的

data = np.random.randn(1000)

# 區(qū)別:加上參數(shù)density=1
plt.hist(data, bins=40, density=1, edgecolor='black')
plt.show()

繪圖技巧

技巧1:設(shè)置大小

x = [2,3,4]
y = [4,6,8]

plt.plot(x,y)
#設(shè)置大小  8代表800像素
plt.rcParams['figure.figsize'] = (8,6)

plt.show()

添加文字說明

文字說明包含標(biāo)題、軸標(biāo)簽等

x = [2,3,4]
y = [4,6,8]

plt.plot(x,y)
# 添加標(biāo)題和軸名稱
plt.title('Title')
plt.xlabel('x axis')
plt.ylabel('y axis')

plt.show()

修改線條樣式

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
x=np.arange(1,8)

plt.plot(x,marker='>')
plt.plot(x+4,marker='+')
plt.plot(x*2,marker='o')
plt.show()

添加注釋

plt.rcParams['font.sans-serif']=['SimHei'#用來正常顯示中文標(biāo)簽
plt.rcParams['axes.unicode_minus']=False

x=[1234]
y=[14916]

plt.plot(x,y)
plt.xlabel('x坐標(biāo)軸')
plt.ylabel('y坐標(biāo)軸')
plt.title('標(biāo)題')

# 添加注釋
plt.annotate('我是注釋'
             xy=(2,5), 
             xytext=(210),
            arrowprops=dict(facecolor='black'
                            shrink=0.01),
            )

plt.show()

添加圖例

# 第一條
x1 = np.array([1,3,5])
y1 = x1 + 4
plt.plot(x1,y1,label='y=x+4 ')

# 第二條紅線
y2 = x1 * 2
plt.plot(x1,y2,
         color='red',
         linewidth=3,
         linestyle='--',
         label='y=x*2')

# 設(shè)定位置
plt.legend(loc='upper left')
plt.show()

調(diào)整顏色

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

x=np.arange(1,8)

#顏色的多種寫法
plt.plot(x,color='r')  # r表示red  g表示green  b表示blue
plt.plot(x+1,color='0.5')
plt.plot(x+2,color='#AF00FF')
plt.plot(x+3,color=(0.1,0.2,0.3))
plt.show()

設(shè)置雙軸

# 1
x1 = np.array([1,3,5])
y1 = 50*x1 + 14
plt.plot(x1,y1,label='y=50 * x + 4 ')
plt.legend(loc='upper right'# 圖例位置

# 重要代碼:設(shè)置雙軸
plt.twinx()  

# 2
y2 = -x1 * 20 + 3
plt.plot(x1,y2,color='red',
         linewidth=3,
         linestyle='--',
         label='y=-x * 20 + 3')
plt.legend(loc='upper left')

plt.show()

旋轉(zhuǎn)軸刻度

當(dāng)某個(gè)軸的刻度值過長的時(shí)候,我們可以通過旋轉(zhuǎn)的方式進(jìn)行顯示

x = ['Monday','Thursday','Wednesday']
y = [4,6,8]

plt.plot(x,y)
plt.xticks(rotation=45)

plt.show()

繪制多圖-方法1

import matplotlib.pyplot as plt

# 繪制第1張子圖:折線圖
ax1 = plt.subplot(221)
plt.plot([123], [246])

# 繪制第2張子圖:柱形圖
ax2 = plt.subplot(222)
plt.bar([123], [246])

# 繪制第3張子圖:散點(diǎn)圖
ax3 = plt.subplot(223)
plt.scatter([135], [7911])

# 繪制第4張子圖:直方圖
ax4 = plt.subplot(224)
plt.hist([25284])

plt.show()

繪制多圖-方法2

subplots函數(shù)主要是兩個(gè)參數(shù):nrows表示行數(shù),ncols表示列數(shù);同時(shí)設(shè)置大小figsize。

函數(shù)返回的是畫布fig和子圖合集axes

fig, axes = plt.subplots(nrows=2, ncols=2,figsize=(10,6))

# flatten表示將子圖合集展開,得到每個(gè)子圖
ax1,ax2,ax3,ax4 = axes.flatten()

ax1.plot([123], [246])
ax2.bar([123], [246])
ax3.scatter([135], [7911])
ax4.hist([25284])

plt.show()

實(shí)戰(zhàn):繪制股票趨勢(shì)圖

我們從Tushare官網(wǎng)來獲取股票的數(shù)據(jù),首先安裝:

pip install tushare

獲取數(shù)據(jù)

import tushare as ts

df = ts.get_k_data('000001',start='2020-05-08',end='2020-08-08')
df

為了方便后續(xù)的繪圖,需要將日期date字段改成索引:

# 將日期設(shè)置成索引
df1 = df.set_index('date')

默認(rèn)繪圖

我們使用收盤價(jià)close來繪制默認(rèn)的圖形

fig = df1['close'].plot()

plt.show()

添加標(biāo)題

# Pandas直接繪圖
fig = df['close'].plot(title='PingAn')
plt.show()

上面是使用Pandas內(nèi)置的折線圖方法來繪制,下面使用Matplobtlib來繪制:

# 使用Matplotlib繪圖

# 獲取數(shù)據(jù)
# import tushare as ts
# df = ts.get_k_data('000001',start='2018-08-08',end='2020-08-08')

# 調(diào)整時(shí)間
from datetime import datetime
df['date'] = df['date'].apply(lambda x:datetime.strptime(x,'%Y-%m-%d'))

# 繪制折線圖
import matplotlib.pyplot as plt
%matplotlib inline

plt.plot(df['date'],df['close'])
# 標(biāo)題
plt.title('PingAn')
# 旋轉(zhuǎn)
plt.xticks(rotation=-45)  
plt.show()

實(shí)戰(zhàn)進(jìn)階:繪制K線圖+成交量

首先,我們了解一點(diǎn)基本的股票知識(shí):股市的漲跌對(duì)K線圖的影響

安裝庫

為了繪制k線圖,我們需要安裝一個(gè)庫:

#安裝庫mpl_finance
pip install mpl_finance

獲取代碼

df = ts.get_k_data('000001',start='2020-09-08',end='2021-03-08')
df.head()
  • date:日期
  • open:開盤價(jià)
  • close:收盤價(jià)
  • high:最高價(jià)
  • low:最低價(jià)
  • volume:成交量
  • code:股票代碼

日期格式轉(zhuǎn)化

定義一個(gè)將字符串形式的日期轉(zhuǎn)成數(shù)字型的函數(shù):

from matplotlib.pylab import date2num
import datetime

def date_to_number(dates):
    number_time = []
    for date in dates:
        # 字符串轉(zhuǎn)時(shí)間戳格式
        date_time = datetime.datetime.strptime(date,'%Y-%m-%d')
        # 時(shí)間戳格式轉(zhuǎn)成數(shù)字格式
        number_date = date2num(date_time)
        number_time.append(number_date)
    return number_time

下面進(jìn)行的操作是取出上面數(shù)據(jù)中的values部分并轉(zhuǎn)成numpy;同時(shí)調(diào)用上面的函數(shù):

# DataFrame轉(zhuǎn)成numpy數(shù)組格式
df1 = df.values  

# 將二維數(shù)組的日期轉(zhuǎn)成數(shù)字(使用上面的函數(shù))
df1[:,0] = date_to_number(df1[:,0])  

繪制K線圖

fig, ax = plt.subplots(figsize=(15,6))

mpf.candlestick_ochl(ax, # 繪圖Axes的實(shí)例,畫布中的子圖
                     df1,  # 帶繪圖的數(shù)據(jù)
                     width=0.5,  # K線柱形的寬度
                     colorup='red',  # 收盤價(jià)>開盤價(jià)
                     colordown='green',  # 收盤價(jià)<開盤價(jià)
                     alpha=5)  # 柱子的透明度

plt.grid(True)  # 顯示網(wǎng)格線
ax.xaxis_date() # 將x軸設(shè)置成常規(guī)的日期格式

添加均線

下面的代碼是添加5日和20日的均線數(shù)據(jù):

繪制均線圖

fig, ax = plt.subplots(figsize=(15,6))

mpf.candlestick_ochl(ax, # 繪圖Axes的實(shí)例,畫布中的子圖
                     df1,  # 帶繪圖的數(shù)據(jù)
                     width=0.5,  # K線柱形的寬度
                     colorup='red',  # 收盤價(jià)>開盤價(jià)
                     colordown='green',  # 收盤價(jià)<開盤價(jià)
                     alpha=5)  # 柱子的透明度

# 添加均線
plt.plot(df1[:,0],df['MA5'], c='black')
plt.plot(df1[:,0],df['MA20'])

plt.grid(True)  # 顯示網(wǎng)格線
ax.xaxis_date() # 將x軸設(shè)置成常規(guī)的日期格式

# 添加標(biāo)題
plt.title('PingAn')
plt.xlabel('date')
plt.ylabel('Price')
plt.show()

添加成交量

我們將K線圖放在第一個(gè)子圖位置,將成交量放在第二個(gè)位置即可:

#用來正常顯示中文標(biāo)簽
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False

# 畫布、子圖、共享x軸
fig, ax = plt.subplots(2,1,sharex=True,figsize=(15,6)) 

ax1,ax2 = ax.flatten()

# 第一個(gè)圖
mpf.candlestick_ochl(ax1, # 繪圖Axes的實(shí)例,畫布中的子圖
                     df1,  # 帶繪圖的數(shù)據(jù)
                     width=0.5,  # K線柱形的寬度
                     colorup='red',  # 收盤價(jià)>開盤價(jià)
                     colordown='green',  # 收盤價(jià)<開盤價(jià)
                     alpha=5)  # 柱子的透明度

# 添加均線
ax1.plot(df1[:,0],df['MA5'], c='black')
ax1.plot(df1[:,0],df['MA20'])

# 顯示網(wǎng)格線
ax1.grid(True)  
# 將x軸設(shè)置成常規(guī)的日期格式
ax1.xaxis_date() 
# 添加標(biāo)題、軸名稱等
ax1.set_title('平安股價(jià)走勢(shì)圖')
ax1.set_xlabel('時(shí)間')
ax1.set_ylabel('價(jià)格')
# --------------------------

# 第2個(gè)子圖
ax2.bar(df1[:,0],df1[:,5])
ax2.set_xlabel('時(shí)間')
ax2.set_ylabel('成交量')  # 成交量
ax2.grid(True)
ax2.xaxis_date()

plt.show()


本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
python數(shù)據(jù)分析工具之 matplotlib詳解
50題Matplotlib從入門到精通
PYTHON數(shù)據(jù)可視化:利用COLORMAP讓你的圖表與眾不同
matplotlib in Ipython Notebook
Python Matplotlib簡易教程
Python可視化.1
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服