我想使用具有以下格式的数据框执行 3d 散点图:
df = pd.DataFrame({"Date": ['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04'],
"A_x1": [1, 2, 2, 2],
"A_x2": [9, 2, 2, 3],
"A_x3": [1, 3, 2, 9],
"B_x1": [1, 8, 2, 3],
"B_x2": [3, 8, 9, 3],
"B_x3": [2, 4, 5, 5],
"C_x1": [2, 6, 5, 2],
"C_x2": [4, 8, 1, 3],
"C_x3": [6, 9, 5, 7]})
日期 | A_x1 | A_x2 | A_x3 | B_x1 | B_x2 | B_x3 | C_x1 | C_x2 | C_x3 | D_x1 |
---|---|---|---|---|---|---|---|---|---|---|
2021-01-01 | 1 | 9 | 1 | 1 | 3 | 2 | 2 | 4 | 6 | ... |
2021-01-02 | 2 | 2 | 3 | 8 | 8 | 4 | 6 | 8 | 9 | ... |
2021-01-03 | 2 | 2 | 2 | 2 | 9 | 5 | 5 | 1 | 5 | ... |
2021-01-04 | 2 | 3 | 9 | 3 | 3 | 5 | 2 | 3 | 7 | ... |
您可能猜到:3d 散点图的 3 轴应为 x1、x2 和 x3。所以我有 3 个轴的 3 个变量,但每行有多个值。我想将 A_x1/2/3、B_x1/2/3 等的值绘制到相应的点并为它们着色(例如 A = 红色、B = 绿色、C = 蓝色等)。
我尝试使用 matplotlib 和 plotly,但我对任何其他库都是开放的。要获取所有 x_1 值的数据帧或数组,我使用以下代码。
df_x_1 = df.filter(like='1') #df x_1
x_1 = df_x_1.to_numpy() #arr_x_1
这是情节中最简单的散点图,工作正常:
import plotly.express as px
fig = px.scatter_3d(df,
x='A_x1',
y='A_x2',
z='A_x3',
#color='species'
)
fig.show()
部分问题已被@Ynjxsjmh 剧透解决:
但是这个obv。绘制 A 的 x1、x2、x3 值(=3 列),我希望所有 >!columns 都包括在内。我想做这样的事情,但我得到了不同的错误。尝试使用 >!dataframe 和数组。代码
fig = px.scatter_3d(x=df.filter(like='1').values.ravel('F'),
y=df.filter(like='2').values.ravel('F'),
z=df.filter(like='3').values.ravel('F'),
color = ( df.filter(like='3').values.ravel('F')*df.filter(like='2').values.ravel('F')*df.filter(like='1').values.ravel('F') )**(1/3)
)
fig.show()
这段代码现在有效。数据点(例如 A_x1、x2、x3 出现在正确的位置)。什么浇头仍不清楚:着色。
现在我通过执行 color=(x_1 x_2 x_3)^(1/3)根据其几何大小为数据点着色
我想要什么:根据列的名称或数据框的第一行或其他任何内容为数据点着色(我将不得不添加这一行,但这不成问题)。
有任何想法吗?谢谢!