<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          #Plotly# Python 繪圖神器

          共 14360字,需瀏覽 29分鐘

           ·

          2023-06-12 23:29

          ?文章所涉及內(nèi)容更多來(lái)自網(wǎng)絡(luò),在此聲明,并感謝知識(shí)的貢獻(xiàn)者!

          plotly 介紹


          plotly介紹 Plotly是一個(gè)非常著名且強(qiáng)大的開(kāi)源數(shù)據(jù)可視化框架,它通過(guò)構(gòu)建基于瀏覽器顯示的web形式的可交互圖表來(lái)展示信息,可創(chuàng)建多達(dá)數(shù)十種精美的圖表和地圖。 Plotly是P ython 庫(kù)中一種互動(dòng),開(kāi)源繪圖庫(kù),也是基于javascript的繪圖庫(kù),支持 40 多種獨(dú)特的圖表類型,效果美觀,其中涵蓋各種統(tǒng)計(jì)、財(cái)務(wù)、地理、科學(xué)和三維用例。

          有在線和離線模式,易于保存與分享plotly的繪圖結(jié)果,并且可以與Web無(wú)縫集成;

          96247b65f9221cb58d220a09dbf18a10.webp

          plotly 官網(wǎng)


          Ploty 官網(wǎng)

          https://plotly.com/


          plotly 安裝


          ploty安裝

          pip install plotly


          plotly 教程


          ploty 教程

          -繪圖模式

          Plotly中繪制圖像有在線和離線兩種方式,因?yàn)樵诰€繪圖需要注冊(cè)賬號(hào)獲取API key,較為麻煩

          離線繪圖又有plotly.offline.plot()和plotly.offline.iplot()兩種方法,前者是以離線的方式在當(dāng)前工作目錄下生成html格式的圖像文件,并自動(dòng)打開(kāi);后者是在jupyter notebook中專用的方法,即將生成的圖形嵌入到ipynb文件中

          在jupyter notebook中使用plotly.offline.iplot()

          在jupyter notebook中使用plotly.offline.iplot()時(shí),需要在之前運(yùn)行plotly.offline.init_notebook_mode()以完成繪圖代碼的初始化,否則會(huì)報(bào)錯(cuò)

          在spyder或pycharm使用plotly.offline.plot()

          使用plotly.offline.plot()方法會(huì)在本地新建一個(gè)HTML文件,并可以選擇是否在瀏覽器中打開(kāi)這個(gè)文件。

          plotly.offline.iplot()和plotly.offline.plot()的主要參數(shù)如下:

          figure_or_data:傳入plotly.graph_objs.Figure、plotly.graph_objs.Data、字典或列表構(gòu)成的,能夠描述一個(gè)graph的數(shù)據(jù)

          show_link:bool型,用于調(diào)整輸出的圖像是否在右下角帶有plotly的標(biāo)記

          link_text:str型輸入,用于設(shè)置圖像右下角的說(shuō)明文字內(nèi)容(當(dāng)show_link=True時(shí)),默認(rèn)為'Export to plot.ly'

          image:str型或None,控制生成圖像的下載格式,有'png'、'jpeg'、'svg'、'webp',默認(rèn)為None,即不會(huì)為生成的圖像設(shè)置下載方式

          filename:str型,控制保存的圖像的文件名,默認(rèn)為'plot'

          image_height:int型,控制圖像高度的像素值,默認(rèn)為600

          image_width:int型,控制圖像寬度的像素值,默認(rèn)為800


          -繪圖流程

          1添加圖軌數(shù)據(jù),使用go.Scatter、go.Bar等函數(shù)

          2設(shè)置畫圖布局,使用go.Layout函數(shù)

          3集成圖軌,布局?jǐn)?shù)據(jù),使用go.Figure函數(shù)
          4繪制輸出,使用offline.plot和offline.iplot函數(shù)。


          -常見(jiàn)圖形

          plotly中的graph_objs是plotly下的子模塊,用于導(dǎo)入plotly中所有圖形對(duì)象,在導(dǎo)入相應(yīng)的圖形對(duì)象之后,便可以根據(jù)需要呈現(xiàn)的數(shù)據(jù)和自定義的圖形規(guī)格參數(shù)來(lái)定義一個(gè)graph對(duì)象,再輸入到plotly.offline.iplot()中進(jìn)行最終的呈現(xiàn).

          查詢相關(guān)幫助手冊(cè)得到如下結(jié)果:

          _area

          _bar

          _box

          _candlestick

          _carpet

          _choropleth

          _cone

          _contour

          _contourcarpet

          _deprecations

          _figure

          _figurewidget

          _frame

          _heatmap

          _heatmapgl

          _histogram

          _histogram2d

          _histogram2dcontour

          _layout

          _mesh3d

          _ohlc

          _parcoords

          _pie

          _pointcloud

          _sankey

          _scatter

          _scatter3d

          _scattercarpet

          _scattergeo

          _scattergl

          _scattermapbox

          _scatterpolar

          _scatterpolargl

          _scatterternary

          _splom

          _surface

          _table

          _violin

          area (package)

          bar (package)

          box (package)

          candlestick (package)

          carpet (package)

          choropleth (package)

          cone (package)

          contour (package)

          contourcarpet (package)

          graph_objs

          graph_objs_tools

          heatmap (package)

          heatmapgl (package)

          histogram (package)

          histogram2d (package)

          histogram2dcontour (package)

          layout (package)

          mesh3d (package)

          ohlc (package)

          parcoords (package)

          pie (package)

          pointcloud (package)

          sankey (package)

          scatter (package)

          scatter3d (package)

          scattercarpet (package)

          scattergeo (package)

          scattergl (package)

          scattermapbox (package)

          scatterpolar (package)

          scatterpolargl (package)

          scatterternary (package)

          splom (package)

          surface (package)

          table (package)

          violin (package)


          -圖形參數(shù)

          在根據(jù)繪圖需求從graph_objs中導(dǎo)入相應(yīng)的obj之后,接下來(lái)需要做的事情是基于待展示的數(shù)據(jù),為指定的obj配置相關(guān)參數(shù),這在plotly中稱為構(gòu)造traces(create traces)


          -圖形背景

          plotly中圖像的圖層元素與底層的背景、坐標(biāo)軸等是獨(dú)立開(kāi)來(lái)的,在我們通過(guò)前面介紹的內(nèi)容,定義好繪制圖像需要的對(duì)象之后,可以直接繪制,但如果想要在背景圖層上有更多自定義化的內(nèi)容,就需要定義Layout()對(duì)象,其主要參數(shù)如下,我們根據(jù)設(shè)置對(duì)象的不同分為幾個(gè)部分并分開(kāi)舉例講解:

          1文字

          文字是一幅圖中十分重要的組成部分,plotly其強(qiáng)大的繪圖機(jī)制為一幅圖中的文字進(jìn)行了細(xì)致的劃分,可以非常有針對(duì)性地對(duì)某一個(gè)組件部分的字體進(jìn)行個(gè)性化的設(shè)置:

          全局文字:

          font:字典型,用于控制圖像中全局字體的部分,其常用鍵及功能如下:

          family:str型,用于控制字體,默認(rèn)為'Open Sans',可選項(xiàng)有'verdana','arial','sans-serif'等等,具體自行移步官網(wǎng)說(shuō)明文檔

          size:int型,用于控制字體大小,默認(rèn)為12

          color:str型,傳入十六進(jìn)制色彩,默認(rèn)為'#444'

          標(biāo)題文字:

          title:str型,用于控制圖像的主標(biāo)題

          titlefont:字典型,用于獨(dú)立控制標(biāo)題字體的部分,其常用鍵如下:

          family:同font中的family,用于單獨(dú)控制標(biāo)題字體

          size:int型,控制標(biāo)題的字體大小

          color:同font中的color

          2 坐標(biāo)軸

          xaxis或yaxis:字典型,控制橫坐標(biāo)的各屬性,其主要鍵如下:

          color:str型,傳入十六進(jìn)制色彩,控制橫坐標(biāo)上所有元素的基礎(chǔ)顏色(在未單獨(dú)指定顏色之前,這些元素均采用此處color指定的顏色)

          title:str型,設(shè)置橫坐標(biāo)軸上的標(biāo)題

          titlefont:字典型,同之前所有同名參數(shù)

          type:str型,用于控制橫坐標(biāo)軸類型,'-'表示根據(jù)輸入數(shù)據(jù)自適應(yīng)調(diào)整,'linear'表示線性坐標(biāo)軸,'log'表示對(duì)數(shù)坐標(biāo)軸,'date'表示日期型坐標(biāo)軸,'category'表示分類型坐標(biāo)軸,默認(rèn)為'-'

          autorange:bool型或'reversed',控制是否根據(jù)橫坐標(biāo)對(duì)應(yīng)的數(shù)據(jù)自動(dòng)調(diào)整坐標(biāo)軸范圍,默認(rèn)為True

          range:list型,控制橫坐標(biāo)軸的區(qū)間范圍,自行設(shè)置無(wú)默認(rèn)項(xiàng),取決于橫坐標(biāo)軸的數(shù)據(jù)類型,格式均為[左端點(diǎn),右端點(diǎn)]

          tickmode:str型,設(shè)置坐標(biāo)軸刻度的格式,'auto'表示自動(dòng)根據(jù)輸入的數(shù)據(jù)來(lái)決定,'linear'表示線性的數(shù)值型,'array'表示由自定義的數(shù)組來(lái)表示(用數(shù)組來(lái)自定義刻度標(biāo)簽時(shí)必須選擇此項(xiàng))

          tickvals:list、numpy array或pandas中的series,作為坐標(biāo)軸刻度標(biāo)簽的替代(tickmode此時(shí)必須被設(shè)置為'array')

          ticks:str型,控制刻度標(biāo)簽的書寫位置,'outside'表示在外側(cè)顯示,'inside'表示在內(nèi)側(cè)顯示,''表示不顯示

          ticklen:int型,設(shè)置刻度標(biāo)簽的像素長(zhǎng)度

          tickwidth:int型,設(shè)置刻度標(biāo)簽的像素寬度

          tickcolor:str型,傳入十六進(jìn)制色彩,用于控制刻度標(biāo)簽的顏色

          tickfont:字典型,同前面所有字典型字體控制參數(shù),用于對(duì)刻度標(biāo)簽進(jìn)行單獨(dú)控制

          tickangle:int型,設(shè)置刻度標(biāo)簽的旋轉(zhuǎn)角度

          showline:bool型,控制是否繪制出該坐標(biāo)軸上的直線部分

          linecolor:str型,十六進(jìn)制色彩,控制坐標(biāo)軸線條的色彩

          linewidth:int型,設(shè)置坐標(biāo)軸直線部分的像素寬度

          showgrid:bool型,控制是否繪制網(wǎng)格線

          gridcolor:str型,十六進(jìn)制色彩,控制網(wǎng)格線的顏色

          gridwidth:int型,控制網(wǎng)格線的像素寬度

          zeroline:bool型,控制是否在0值處繪制0刻度線

          side:str型,控制x(y)軸放置于作圖區(qū)域的位置,'top'、'bottom'控制橫軸放置于頂部亦或是底部;'left'、'right'控制縱軸放置于左側(cè)亦或是右側(cè)

          3 圖例

          showlegend:bool型,控制是否繪制圖例

          legend:字典型,用于控制用圖例相關(guān)的所有屬性的設(shè)置,主要鍵如下:

          bgcolor:str型,十六進(jìn)制設(shè)置圖例背景顏色

          bordercolor:設(shè)置圖例邊框的顏色

          borderwidth:int型,設(shè)置圖例邊框的顏色

          font:字典型,設(shè)置圖例文字部分的字體,同前面所有font設(shè)置規(guī)則

          orientation:str型,設(shè)置圖例各元素的堆疊方向,'v'表示豎直,'h'表示水平堆疊

          x:數(shù)值型,-2到3之間,用于設(shè)置圖例在水平方向上的位置,默認(rèn)為1.02

          xanchor:str型,用于直接設(shè)置圖例水平位置的固定位置,有'left'、'center'、'right'和'auto'幾個(gè)可選項(xiàng)

          y:數(shù)值型,-2到3之間,用于設(shè)置圖例在豎直方向上的位置,默認(rèn)為1

          yanchor:str型,用于直接設(shè)置圖例豎直方向上的固定位置,有'top'、'middle'、'bottom'和'auto'幾個(gè)選項(xiàng)

          4 其它雜項(xiàng)

          width:int型,控制圖像的像素寬度,默認(rèn)為700

          height:int型,控制圖像的像素高度,默認(rèn)為450

          margin:字典型輸入,控制圖像邊界的寬度,其主要鍵如下:

          l:int型,控制圖像距離左邊界的留白區(qū)域像素寬度,默認(rèn)為80

          r:int型,控制圖像距離右邊界的留白區(qū)域像素寬度,默認(rèn)為80

          t:int型,控制圖像距離上邊界的留白區(qū)域像素寬度,默認(rèn)為100

          b:int型,控制圖像距離下邊界的留白區(qū)域像素寬度,默認(rèn)為80

          pad:int型,控制坐標(biāo)軸與圖像區(qū)域的像素距離,默認(rèn)為0

          paper_bgcolor:str型,傳入十六進(jìn)制色彩,控制圖床的顏色

          plot_bgcolor:str型,傳入十六進(jìn)制色彩,控制繪圖區(qū)域的顏色

          hidesources:bool型,控制是否在圖像的右下角標(biāo)記來(lái)源link

          hovermode:str型或False,用于設(shè)置懸停交互的方式,有'x'、'y'、'closest'和False這幾個(gè)可選項(xiàng),F(xiàn)alse表示無(wú)懸停交互方式

          hoverlabel:字典型輸入,用于控制懸停時(shí)出現(xiàn)的信息框的各屬性,主要鍵如下:

          bgcolor:str型,傳入十六進(jìn)制色彩,控制信息框的背景色

          bordercolor:str型,傳入十六進(jìn)制色彩,控制信息框邊框的顏色

          font:字典型,控制信息框中字體的各屬性,其主要鍵如下:

          family:同之前,控制字體

          size:int型,控制字體大小,默認(rèn)13

          color:str型,傳入十六進(jìn)制色彩,控制字體顏色

          namelength:int型,控制對(duì)信息框中顯示的對(duì)應(yīng)trace的名字的長(zhǎng)度限制,建議設(shè)置為-1,即全部顯示,默認(rèn)為15,即對(duì)于長(zhǎng)于15的trace只顯示前15個(gè)字符

          grid:字典型,控制一頁(yè)多圖(subplots)時(shí)的規(guī)劃多個(gè)圖的網(wǎng)格的屬性,其常用鍵如下:

          rows:int型,控制網(wǎng)格中的行數(shù)(放置笛卡爾坐標(biāo)系類型的子圖),也可以設(shè)置多于實(shí)際繪圖需求的行數(shù)以達(dá)到留白的目的

          roworder:str型,設(shè)置子圖按行,是從下往上疊加還是從上往下疊加,對(duì)應(yīng)'top to bottom'和'bottom to top',默認(rèn)為'top to bottm',注意,只可以設(shè)置行的疊加順序,列方向上的疊加順序始終為從左往右

          columns:int型,同rows,控制網(wǎng)格的列數(shù)

          pattern:str型,用于控制一頁(yè)多圖中子圖之間坐標(biāo)軸的共享情況,'coupled'表示每一列共享同一個(gè)x軸,每一行共享一個(gè)y軸,'independent'表示每個(gè)子圖xy軸獨(dú)立(這在進(jìn)行量綱相差較大的子圖的繪制尤為有用)

          xgap:float型,0.0-1.0之間,用于控制子圖之間的水平空白區(qū)域?qū)挾日家粋€(gè)子圖寬度的百分比

          ygap:同xgap,控制豎直方向上子圖之間的寬度

          domain:字典型,設(shè)置一頁(yè)多圖時(shí),子圖占據(jù)的區(qū)域距離上下左右邊界的寬度情況,其主要鍵如下:

          x:list型,格式為[x1,x2],x1控制子圖區(qū)域左端與圖床左端的距離,x2控制子圖區(qū)域右端與圖床左端的距離,x1、x2都代表百分比,在0.0-1.0之間取值

          y:同x,控制子圖區(qū)域上下端分別與圖床上端的距離百分比


          plotly 手冊(cè)


          ploty 手冊(cè)

          資料: https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf

          b366fc99316f8b541f75a3fed93f9db4.webp

          3005ecfef243d0b4ac9e7f8287885aa4.webp

          plotly 案例


          ploty 案例

          曲線圖

          503a9f5c9e59453807e45cf9cfd6510f.webp

          import plotly.offline as of

          import plotly.graph_objs as go

          of.offline.init_notebook_mode(connected=True)

          trace0 = go.Scatter(

          x=[1, 2, 3, 4],

          y=[10, 15, 13, 17],

          mode='markers'

          )

          trace1 = go.Scatter(

          x=[1, 2, 3, 4],

          y=[16, 5, 11, 9]

          )

          data = go.Data([trace0, trace1])

          of.plot(data)


          堆疊圖

          13497aebacb31d23c1c307d19efcea1c.webp

          import plotly

          import plotly.offline as of

          import plotly.graph_objs as go

          trace1 = go.Bar(

          x=['giraffes', 'orangutans', 'monkeys'],

          y=[20, 14, 23],

          name='SF Zoo'

          )

          trace2 = go.Bar(

          x=['giraffes', 'orangutans', 'monkeys'],

          y=[12, 18, 29],

          name='LA Zoo'

          )

          data = [trace1, trace2]

          layout = go.Layout(

          barmode='stack'

          )

          fig = go.Figure(data=data, layout=layout)

          of.plot(fig)


          餅圖

          35f729df86f518f86d5f76740b69eeca.webp

          import plotly

          import plotly.offline as of

          import plotly.graph_objs as go

          labels = ['Oxygen','Hydrogen','Carbon_Dioxide','Nitrogen']

          values = [4500,2500,1053,500]

          colors = ['#FEBFB3', '#E1396C', '#96D38C', '#D0F9B1']

          trace = go.Pie(labels=labels, values=values,

          hoverinfo='label+percent', textinfo='value',

          textfont=dict(size=20),

          marker=dict(colors=colors,

          line=dict(color='#000000', width=2)))

          of.plot([trace])


          3D 圖

          3b836d534ae56af0010d713109ab75d6.webp

          import plotly

          import plotly.offline as of

          import plotly.graph_objs as go

          import numpy as np

          s = np.linspace(0, 2 * np.pi, 240)

          t = np.linspace(0, np.pi, 240)

          tGrid, sGrid = np.meshgrid(s, t)

          r = 2 + np.sin(7 * sGrid + 5 * tGrid) # r = 2 + sin(7s+5t)

          x = r * np.cos(sGrid) * np.sin(tGrid) # x = r*cos(s)*sin(t)

          y = r * np.sin(sGrid) * np.sin(tGrid) # y = r*sin(s)*sin(t)

          z = r * np.cos(tGrid) # z = r*cos(t)

          surface = go.Surface(x=x, y=y, z=z)

          data = go.Data([surface])

          layout = go.Layout(

          title='Parametric Plot',

          scene=go.Scene(

          xaxis=go.XAxis(

          gridcolor='rgb(255, 255, 255)',

          zerolinecolor='rgb(255, 255, 255)',

          showbackground=True,

          backgroundcolor='rgb(230, 230,230)'

          ),

          yaxis=go.YAxis(

          gridcolor='rgb(255, 255, 255)',

          zerolinecolor='rgb(255, 255, 255)',

          showbackground=True,

          backgroundcolor='rgb(230, 230,230)'

          ),

          zaxis=go.ZAxis(

          gridcolor='rgb(255, 255, 255)',

          zerolinecolor='rgb(255, 255, 255)',

          showbackground=True,

          backgroundcolor='rgb(230, 230,230)'

          )

          )

          )

          fig = go.Figure(data=data, layout=layout)

          of.plot(fig)


          散點(diǎn)圖

          7df5597c09e390630f308ffd70fff062.webp

          import plotly

          import plotly.offline as of

          import plotly.graph_objs as go

          import numpy as np

          N = 100

          random_x = np.linspace(0, 1, N)

          random_y0 = np.random.randn(N)+5

          random_y1 = np.random.randn(N)

          random_y2 = np.random.randn(N)-5

          # Create traces

          trace0 = go.Scatter(

          x = random_x,

          y = random_y0,

          mode = 'markers',

          name = 'markers'

          )

          trace1 = go.Scatter(

          x = random_x,

          y = random_y1,

          mode = 'lines+markers',

          name = 'lines+markers'

          )

          trace2 = go.Scatter(

          x = random_x,

          y = random_y2,

          mode = 'lines',

          name = 'lines'

          )

          data = [trace0, trace1, trace2]

          of.plot(data)


          區(qū)域圖

          eef6181d256760630a3aade815fc0b05.webp

          import plotly as py

          import plotly.graph_objs as go

          pyplt = py.offline.plot

          import numpy as np

          #隨機(jī)生成100個(gè)交易日的收益率

          s1=np.random.RandomState(8)#生成局部種子

          s2=np.random.RandomState(9)#生成局部種子

          rd1=s1.rand(100)/10-0.02 #挑選100個(gè)數(shù)

          rd2=s2.rand(100)/10-0.02

          #設(shè)定初始資金

          initial1=100000

          initial2=100000

          total1=[]

          total2=[]

          for i in range(len(rd1)):

          initial1 = initial1*rd1[i] + initial1

          initial2 = initial2*rd2[i] + initial2

          total1.append(initial1)

          total2.append(initial2)

          trace1=go.Scatter(

          y=total1,fill='none',?? #填充到下一條曲線

          mode='lines',#無(wú)邊界線

          name="策略1"

          )

          trace2=go.Scatter(

          y=total2,fill='tonexty', #填充到y(tǒng)=0

          mode='lines',#無(wú)邊界線

          name="策略2"

          )

          data=[trace1,trace2]

          layout=dict(title='策略凈值線',xaxis=dict(title='交易天數(shù)'),yaxis=dict(title='凈值'))

          fig=dict(data=data,layout=layout)

          pyplt(fig,filename='交叉處填充面積圖.html')



          plotly 手冊(cè)


          其他問(wèn)題:

          Spyder 啟動(dòng)閃退

          在Prompt中輸入spyder return 或者spyder --new-instance,會(huì)出現(xiàn)報(bào)錯(cuò)信息,根據(jù)報(bào)錯(cuò)信息檢索

          https://blog.csdn.net/weixin_42215298/article/details/130408436

          使用清華鏡像安裝

          pip install -i https://pypi.tuna.tsinghua.edu.cn/simple package

          https://blog.csdn.net/myyggsddu/article/details/128199778


          參考資料


          參考資料:

          https://blog.csdn.net/weixin_45638146/article/details/115294728

          https://www.jianshu.com/p/84b54e13a7d8

          https://blog.csdn.net/m0_59485658/article/details/129051020

          https://blog.csdn.net/m0_72557783/article/details/126548209

          https://zhuanlan.zhihu.com/p/144005902

          https://blog.csdn.net/weixin_43794311/article/details/105326655

          https://www.freesion.com/article/4823543536/

          瀏覽 159
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产一区二区三区四 | 99久久99久久兔费精桃 | 黄在线观看网站 | 一本大道久久久综合精品 | 看毛片视频 |