plotly

      在〈plotly〉中尚無留言

plotly

Simple Slider Control

#!/usr/bin/python3
import plotly.graph_objects as go
import numpy as np
import plotly

# Create figure
fig = go.Figure()

x=np.arange(0, 10, 0.01)
# Add traces, one for each slider step
for step in np.arange(0, 5, 0.1):
    fig.add_trace(
        go.Scatter(
            visible=False,
            line=dict(color="#00CED1", width=6),
            name="𝜈 = " + str(step),
            x=x,
            y=np.sin(step * x)
        )
)

# Make 10th trace visible
fig.data[10].visible = True

# Create and add slider
steps = []
for i in range(len(fig.data)):
    step = dict(
        method="restyle",
        args=["visible", [False] * len(fig.data)],
    )
    step["args"][1][i] = True  # Toggle i'th trace to "visible"
    steps.append(step)

sliders = [dict(
    active=10,
    currentvalue={"prefix": "Frequency: "},
    pad={"t": 50},
    steps=steps
)]

fig.update_layout(
    sliders=sliders
)

fig.show()
#plotly.offline.plot(fig, filename='plotly_slider.html', auto_open=True)

np.eye()

協方差矩陣, 如 eye(3) 產生3*3維矩陣,  中心對角為均為 1

a=np.eye(3)
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]

eye(3, k=1), 右上第一條對角線為 1

[[0. 1. 0.]
 [0. 0. 1.]
 [0. 0. 0.]]

eye(3, k=-1), 左下第一條對角線為 1

[[0. 0. 0.]
 [1. 0. 0.]
 [0. 1. 0.]]

np.random.multivariate_normal

此方法用於產生多元正態分佈矩陣, 裏面共有三個參數(多維分佈均值, 協方差矩陣, 組數)

第一個參數 np.array([0,0,0]) : 產生三個亂數, 每個亂數的平均值為 0. 若為([1,1,1]), 則其平均值為1.
第二個參數為 eye(n), 產生 n*n的對角陣列.
第三個參數為產生幾組亂數.

以下會產生100組三個元素的陣列, 若再加上 transpose(), 則會90度旋轉, 產生三組 list

import numpy as np
a=np.random.multivariate_normal(np.array([0,0,0]), np.eye(3), 100)
print(a)
print(a.transpose())
結果:
[[ 0.52644838 -0.54311624 1.07767445]
 [ 0.75128152 -0.72321168 -0.50488629]]
[[ 0.52644838 0.75128152]
 [-0.54311624 -0.72321168]
 [ 1.07767445 -0.50488629]]

簡易3D點散圖 Scatter3d

首先使用np產生三組亂數list, 作為x, y, z的值, 再使用 go.Scatter3d繪製圖型 trace1, trace2. 然後將所有圖形加入list中, 並設定layout邊界, 然後將list及layout交給offline顯圖

請注意

1. 官方及網路上的教學, 都以 如下方式繪圖, 但這是給 jupyter notebook用的. 使用Pycharm, 則需使用plot.offline.plot進行繪圖

import plotly.plotly as py
py.iplot(fig, filename='simple-3d-scatter')

2.  color=’rgba(255,0,0,0.5)’, 其 alpha不是 0~255, 而是0~1,愈大愈不透明

底下的繪圖步驟為
a. 使用 go.Scatter3d()產生trace資料
b. 再將所有的trace集合成一個 list, (在此以data變數命名)
c. 使用 go.Figure產生圖表. go.Figure裏的參數即為data, 並再多加一個layout的設置
d. 最後使用 plotly.offline.plot將圖表繪出

🔒 更多內容,請登入會員繼續閱讀。

立即登入

Color Scaling

要畫出鮮豔的色彩其實很簡單, 只需更改如下藍色的地方即可

viridis[՝viridis] : 翠綠色

🔒 更多內容,請登入會員繼續閱讀。

立即登入

直線

底下是畫直線的方式. 而繪圖步驟也不一定要按上面所描述.
a. 使用go.Figure()產生圖表
b. 產生trace. 並使用 fig.add_trace()將 trace加入
c. 產生layout, 並使用 fig.update_layout將layout加入
d. plotly.offline.plot將圖表繪出

#!/usr/bin/python3
import plotly.graph_objs as go
import plotly
import numpy as np

x=np.zeros(20)
y=np.zeros(20)
z=list(range(20))
fig=go.Figure()
fig.add_trace(
    go.Scatter3d(
        x=x, y=y, z=z, mode='markers+lines',
        marker=dict(
            size=8,
            line=dict(color='rgba(0, 0, 0, 0)',width=0),
            color='rgba(255, 0, 255, 0.5)',
        )
    )
)
fig.update_layout(
    go.Layout(
        margin=dict(l=0,r=0,b=0,t=0)
    )
)
plotly.offline.plot(fig, filename='plotly3d_line.html', auto_open=True)

歐幾里得

歐幾里得公式就是直角三角形的斜邊是二邊長的平方總和開根號

$(r=\sqrt{x^2+y^2})$

但歐幾里得的精華並不是只有如此而以,三維的直線距離如下

$(z=\sqrt{x^2+y^2+z^2})$

請由如下的代碼及圖示,仔細思考一下。

🔒 更多內容,請登入會員繼續閱讀。

立即登入

圖形如下

由上圖可知 $(m=\sqrt{x^2+y^2})$。

$(r=\sqrt{m^2+z^2}=\sqrt{x^2+y^2+z^2})$

能在網頁上畫出三維的解說,本站也算是先進了吧。

那麼 4,5 維呢? 這就無法用圖示畫出來了。但由上述說明,公式就是

$(r=\sqrt{x_{1}^2+x_{2}^2+x_{3}^2+x_{4}^2+x_{5}^2})$

$(x_{1}, x_{2}, x_{3}, x_{4}, x_{5})$ 分別代表不同的變數,也就多個維度。

圓型

底下範例,繪製 10 個圓型

🔒 更多內容,請登入會員繼續閱讀。

立即登入

螺旋

🔒 更多內容,請登入會員繼續閱讀。

立即登入

Fill Line

🔒 更多內容,請登入會員繼續閱讀。

立即登入

3D地型圖

Topographical [͵tɑpəˋgræfɪk!]

地型圖是一個非常厲害的演算法, 只需要x, y平面中, 將每一點的Z軸高度傳入, 就可以在3D空間中取得各點之間的曲線. 下面的代碼中, 使用pd.read_csv()讀取官網的範例資料. 在此本人額外加入了 dtype=’str’, 將讀取的資料直接以字串讀取, 讓列印出來的小數值不會因精準度而亂跳.

最後將讀取的軸z高度傳入go.Surface()

🔒 更多內容,請登入會員繼續閱讀。

立即登入

子繪圖區域

底下程式可以使用子繪圖區域

🔒 更多內容,請登入會員繼續閱讀。

立即登入

其他支援

plotly目前長條圖, 圓餅圖等, 並沒有3D支援. 官方說明了未來可能會支援, 但不在短期之內. 也就是說未來一年內, 都不會推出其他3D的圖形

官網

官方網址有些教學簡介,請參考如下 : https://plot.ly/python/3d-surface-plots/

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *