繁体   English   中英

使用数据框在Python中绘制3D表面

[英]Plotting 3D surface in Python with dataframe

我对Python还是很陌生,因此,如果我的问题不如流利的python用户那么连贯,我感到抱歉,但是我已经在网上搜索了,但实际上还没有找到解决方案。 我想将csv文件中的一组实验数据绘制为3D表面。 它的结构如下:

               x(time)
y(depth)   z(temperature readings)
y          z(temperature readings)
y          z(temperature readings)
y          z(temperature readings)

基本上,我的第一行和我的左手列应该用作深度时间数组的x,y部分,而z是每个x,y坐标处的温度读数。

我尝试将x和y设置为数组,然后使用meshgrid(x,y)设置网格。 但是我的z是值,而不是x,y的显式函数。 所以我无法正常工作。 我尝试使用x,y引用z,但这似乎不起作用。

我也尝试过将其导入为数据框并使用3D绘图选项,但是它们似乎都需要以下格式:

   x y z
   .....
   .....
   .....

这对我的数据集没有帮助。 我将不胜感激任何想法/建议! 谢谢。

一开始怎么样? 数据读取和重塑部分并不是地球上最快,最可靠的部分-如果您进行较大规模的此类工作,则可以使用一些经过战斗验证的熊猫例程,但是该示例可能使您了解如何做到这一点。

from plotly.offline import plot
from plotly.graph_objs import Figure, Layout, Surface

# Some "random" data in the desired format
some_data = """depth;1;2;3;4
0.2;0;1;1;0
0.4;0.2;1.4;1.6;0.8
0.6;0.3;1.2;1.7;0.7
0.8;0.1;0.8;1.1;0.3
"""

# Iterate over lines in data - bringing it into shape
data_z = []
data_y = []
for line_index, line in enumerate(some_data.split('\n')):
    # Get time vector (x)
    if line_index == 0:
        data_x = [float(x) for x in line.split(';')[1:]]
    # Get z-values
    else:
        # If line is not empty
        if line != '':
            data_z.append([float(z) for z in line.split(';')[1:]])
            data_y.append(float(line.split(';')[0]))

# Prepare a plot
fig = Figure(
    data = [
        Surface(
            x = data_x,
            y = data_y,
            z = data_z
        )
    ],
    layout = Layout(
        title = 'some data plot',
        autosize = True
        )
    )

# Spit it out ...
plot(fig, filename='some-data-surface')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM