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/
