[英]Cones color problems with Plotly
使用 Plotly 繪制錐體時遇到了一個小問題。 在我的數據中,我有兩種類型的向量用於范數 1 和 1.5。 當我在一個立方體上只繪制其中的 8 個時,顏色渲染得非常好,每種類型的向量都有兩種顏色中的一種。 但是,一旦我用 2 個立方體變大,它就會變得非常隨機。 這是一個重現此問題的最小示例。
數據:
import numpy as np
import pandas as pd
import plotly.graph_objects as go
pos=pd.DataFrame([
[0.0,0.0,0.0],
[0.5,0.0,0.0],
[0.0, 0.5,0.0],
[0.5,0.5,0.0],
[0.0,0.0,0.5],
[0.5,0.0,0.5],
[0.0,0.5,0.5],
[0.5,0.5,0.5]
], columns=['x','y','z'])
pos2=pd.DataFrame([
[0.0,0.0,0.0],
[0.5,0.0,0.0],
[0.0, 0.5,0.0],
[0.5,0.5,0.0],
[0.0,0.0,0.5],
[0.5,0.0,0.5],
[0.0,0.5,0.5],
[0.5,0.5,0.5],
[1.0,0.0,0.0],
[1.5,0.0,0.0],
[1.0, 0.5,0.0],
[1.5,0.5,0.0],
[1.0,0.0,0.5],
[1.5,0.0,0.5],
[1.0,0.5,0.5],
[1.5,0.5,0.5]
], columns=['x','y','z'])
type = pd.DataFrame(np.array([[1],[1.5],[1],[1.5],[1],[1.5],[1],[1.5],[1],[1.5],[1],[1.5],[1],[1.5],[1],[1.5]]), columns=['Type'])
vec = pd.DataFrame(np.array([[ 0.56493151, 0.58643612, -0.5804697 ],
[ 0.52637789, -0.81556709, -0.24036772],
[-0.64603163, -0.4828808 , 0.59115925],
[-0.42559098, 0.83496509, 0.34886332],
[ 0.16788166, 0.63197593, 0.75658587],
[ 0.8961372 , -0.20426566, 0.39397165],
[-0.08599516, -0.68074558, -0.72745467],
[-0.90366508, 0.25896575, -0.34106622],
[ 0.68002417, 0.47929612, -0.55483543],
[ 0.2721998 , 0.70224966, -0.65783941],
[-0.68464335, -0.51281615, 0.5179605 ],
[-0.35330142, -0.53106658, 0.77015998],
[-0.46760187, 0.29858559, 0.83198265],
[ 0.68459979, -0.50165276, 0.52883612],
[ 0.44722097, -0.32492581, -0.83331664],
[-0.55474541, 0.49785322, -0.66663311]]), columns=['x','y','z'])
繪制 1 個立方體:
layout = go.Layout(
title='Cones',
width=700,
height=700
)
fig = go.Figure(data = go.Cone(
x=pos['x'],
y=pos['y'],
z=pos['z'],
u=type['Type']*vec['x'],
v=type['Type']*vec['y'],
w=type['Type']*vec['z'],
colorscale='viridis',
colorbar=dict(thickness=20, ticklen=4),
sizemode="absolute",
sizeref=0.5,
anchor='tail'
), layout=layout)
fig
該圖顯示了 8 個向量的正確顏色。
繪制 2 個立方體:
layout = go.Layout(
title='Cones',
width=700,
height=700
)
fig = go.Figure(data = go.Cone(
x=pos.append(pos+[1,0,0], ignore_index=True)['x'],
y=pos.append(pos+[1,0,0], ignore_index=True)['y'],
z=pos.append(pos+[1,0,0], ignore_index=True)['z'],
u=type['Type']*vec['x'],
v=type['Type']*vec['y'],
w=type['Type']*vec['z'],
colorscale='viridis',
colorbar=dict(thickness=20, ticklen=4),
sizemode="absolute",
sizeref=0.5,
anchor='tail'
), layout=layout)
fig
正如您在最后一張圖片中看到的,范數 1 的所有向量都是深紫色,而范數 1.5 的向量采用漸變顏色,有些甚至是深紫色,如顯示其坐標的錐體所示。
有誰知道如何解決這個問題?
這可能不是一個有用的答案,但我能弄清楚的最好的是你偶然發現了一個錯誤。 我剛剛更新到最新的(plotly 4.11.0)並且我得到了相同的結果。
如果您為u
、 v
、 w
傳入一個常量,它會正確呈現:
# using pos df from above
vect=pd.DataFrame(np.full((16, 3), 0.866),columns=['u','v','w'])
fig = go.Figure(data = go.Cone(
x=pos.append(pos+[1,0,0], ignore_index=True)['x'],
y=pos.append(pos+[1,0,0], ignore_index=True)['y'],
z=pos.append(pos+[1,0,0], ignore_index=True)['z'],
u=vect['u'],
v=vect['v'],
w=vect['w'],
))
fig.show()
然后我在想,也許數據沒有對齊(輸入 df 的大小並不總是相同,也沒有使用旁注pos2
)......但是,即使你的數據被提取並放入vortexTest.csv
我得到了類似的結果:
x, y, z, u, v, w
0, 0, 0, 0.564932, 0.586436, -0.58047
0.5, 0, 0, 0.789567, -1.223351, -0.360552
0, 0.5, 0, -0.646032, -0.482881, 0.591159
0.5, 0.5, 0, -0.638386, 1.252448, 0.523295
0, 0, 0.5, 0.167882, 0.631976, 0.756586
0.5, 0, 0.5, 1.344206, -0.306398, 0.590957
0, 0.5, 0.5, -0.085995, -0.680746, -0.727455
0.5, 0.5, 0.5, -1.355498, 0.388449, -0.511599
1, 0, 0, 0.680024, 0.479296, -0.554835
1.5, 0, 0, 0.4083, 1.053374, -0.986759
1, 0.5, 0, -0.684643, -0.512816, 0.517961
1.5, 0.5, 0, -0.529952, -0.7966, 1.15524
1, 0, 0.5, -0.467602, 0.298586, 0.831983
1.5, 0, 0.5, 1.0269, -0.752479, 0.793254
1, 0.5, 0.5, 0.447221, -0.324926, -0.833317
1.5, 0.5, 0.5, -0.832118, 0.74678, -0.99995
df= pd.read_csv("vortexTest.csv")
fig2 = go.Figure(data = go.Cone(
x=df['x'], y=df['y'], z=df['z'],
u=df['u'], v=df['v'], w=df['w'],
cmax=1.5,
cmin=1
))
fig2.show()
看起來norm
計算正確,但不知何故顏色應用不正確。 正如您所指出的,這里應該只有兩種顏色,黃色代表 1.5,藍色代表 1.0。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.