2D截面平面通过自由的3D点数据(Python)

huangapple go评论82阅读模式
英文:

2D section plane through free 3D point data (Python)

问题

好的,这是您要翻译的内容:

"Good day

I have been trying to solve the following problem for two days now. Unfortunately I am not an expert. Still, I allow myself to try to describe my problem here and be thankful for any help.

I have measurement data z (eps_xx) to specific x and y coordinates. You can see the format represented below as Pandas Dataframe:

      Node [-]   x [m]   y [m]    eps_xx [-]
0            1  0.0096  0.0089  8.310000e-07
1            2  0.0000  0.0089  1.317000e-07
2            3  0.0000  0.0000  8.104000e-07
3            4  0.0096  0.0000  2.465000e-06
4            5  0.0192  0.0000  6.276000e-06
...        ...     ...     ...           ...
2314      2315  0.7700  0.1333 -7.269000e-06
2315      2316  0.7700  0.1426 -6.697000e-06
2316      2317  0.7700  0.1499 -3.587000e-06
2317      2318  0.7700  0.1520  6.296000e-07
2318      2319  0.7700  0.1600 -2.000000e-06

The points of the x and y coordinates do not follow any pattern and are freely distributed.
I would like to create a 3D surface plot from this data (preferably in plotly but matplolib is also OK). A scatter plot I have already done:

import pandas as pd
import plotly.graph_objects as go

# Read data from Excel file
df = pd.read_excel('Data.xlsx', sheet_name="Step_5")
print(df)

# Extract x, y, z values from data frame
x = df['x [m]'].values
y = df['y [m]'].values
z = df['eps_xx [-]'].values

# Create a 3D scatter plot with the vertical plane
fig = go.Figure()

# Add the scatter plot trace
fig.add_trace(go.Scatter3d(x=x, y=y, z=z, mode='markers', marker=dict(size=3)))

# Set plot layout
fig.update_layout(scene=dict(xaxis_title='x [m]', yaxis_title='y [m]', zaxis_title='eps_xx [-]'))

# Display plot
fig.show()

2D截面平面通过自由的3D点数据(Python)

  1. But because the x and y points are freely distributed, the first thing I can't do now is to create a surface plot with go.Surface(x=x, y=y, z=z).

  2. After I succeed in creating a surface from these 3D measurement points, I would like to generate a 2D plot from it along a given vertical plane. Actually exactly as it can be found in this article:
    Wanted Solution like in this article, Picture:

2D截面平面通过自由的3D点数据(Python)

Unfortunately, this article works with functions and not with point measurement data.

  1. The last step would be to get this new 2D data points of the cutted Plot into a Pandas Dataframe again.

Maybe quite a bit of math needs to be done by hand in the background and just displaying the results in Plotly. In my research so far I only hoped that there is already a prefabricated library for such cutting operations in free 3D space. Linear interpolation can be performed between the data points

I tried already several ways to solve my Problem. I used different libraries like numpy, scipy or scikit-learn and tried various code examples I found. But for 3D point data I really didn't found anything suitable.

Thank you for your help!"

英文:

Good day

I have been trying to solve the following problem for two days now. Unfortunately I am not an expert. Still, I allow myself to try to describe my problem here and be thankful for any help.

I have measurement data z (eps_xx) to specific x and y coordinates. You can see the format represented below as Pandas Dataframe:

      Node [-]   x [m]   y [m]    eps_xx [-]
0            1  0.0096  0.0089  8.310000e-07
1            2  0.0000  0.0089  1.317000e-07
2            3  0.0000  0.0000  8.104000e-07
3            4  0.0096  0.0000  2.465000e-06
4            5  0.0192  0.0000  6.276000e-06
...        ...     ...     ...           ...
2314      2315  0.7700  0.1333 -7.269000e-06
2315      2316  0.7700  0.1426 -6.697000e-06
2316      2317  0.7700  0.1499 -3.587000e-06
2317      2318  0.7700  0.1520  6.296000e-07
2318      2319  0.7700  0.1600 -2.000000e-06

The points of the x and y coordinates do not follow any pattern and are freely distributed.
I would like to create a 3D surface plot from this data (preferably in plotly but matplolib is also OK). A scatter plot I have already done:

import pandas as pd
import plotly.graph_objects as go

# Read data from Excel file
df = pd.read_excel('Data.xlsx', sheet_name="Step_5")
print(df)

# Extract x, y, z values from data frame
x = df['x [m]'].values
y = df['y [m]'].values
z = df['eps_xx [-]'].values

# Create a 3D scatter plot with the vertical plane
fig = go.Figure()

# Add the scatter plot trace
fig.add_trace(go.Scatter3d(x=x, y=y, z=z, mode='markers', marker=dict(size=3)))

# Set plot layout
fig.update_layout(scene=dict(xaxis_title='x [m]', yaxis_title='y [m]', zaxis_title='eps_xx [-]'))

# Display plot
fig.show()

2D截面平面通过自由的3D点数据(Python)

  1. But because the x and y points are freely distributed, the first thing I can't do now is to create a surface plot with go.Surface(x=x, y=y, z=z).

  2. After I succeed in creating a surface from these 3D measurement points, I would like to generate a 2D plot from it along a given vertical plane. Actually exactly as it can be found in this article:
    Wanted Solution like in this article, Picture:

2D截面平面通过自由的3D点数据(Python)

Unfortunately, this article works with functions and not with point measurement data.

  1. The last step would be to get this new 2D data points of the cutted Plot into a Pandas Dataframe again.

Maybe quite a bit of math needs to be done by hand in the background and just displaying the results in Plotly. In my research so far I only hoped that there is already a prefabricated library for such cutting operations in free 3D space. Linear interpolation can be performed between the data points

I tried already several ways to solve my Problem. I used different libraries like numpy, scipy or scikit-learn and tried various code examples I found. But for 3D point data I really didn't found anything suitable.

Thank you for your help!

答案1

得分: 0

By luck, a friend came to visit this evening and I was able to ask him. I am therefore posting here the solution that now works for me. Perhaps my request will also be useful for someone else.

The solution for me came with from scipy.interpolate import LinearNDInterpolator. With this function it is possible to interpolate over the point data Interpolation = LinearNDInterpolator(list(zip(x, y)), z).

With the now available function Interpolation I can calculate the values along an axis existing out of individual points:

for i in range(0, len(x)):
    z = Interpolation(x[i], y[i])

At the end I can now display the individual data in a 3D-Plot with plotly (Final result) and have also the data available in the back as dataframes for further calculations.

Thanks a lot for the help anyway. Wish you all successful coding.

英文:

By luck, a friend came to visit this evening and I was able to ask him. I am therefore posting here the solution that now works for me. Perhaps my request will also be useful for someone else.

The solution for me came with from scipy.interpolate import LinearNDInterpolator. With this function it is possible to interpolate over the point data Interpolation = LinearNDInterpolator(list(zip(x, y)), z).

With the now available function Interpolation I can calculate the values along an axis existing out of individual points:

    for i in range(0, len(x)):
         z = Interpolation(x[i], y[i])

At the end I can now display the individual data in a 3D-Plot with plotly (Final result) and have also the data aviable in the back as dataframes for further calculations.

Thanks a lot for the help anyway. Wish you all successful coding.

huangapple
  • 本文由 发表于 2023年5月7日 23:14:15
  • 转载请务必保留本文链接:https://go.coder-hub.com/76194737.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定