首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用不同阵列长度的熊猫数据绘制三维光谱数据

用不同阵列长度的熊猫数据绘制三维光谱数据
EN

Stack Overflow用户
提问于 2016-05-20 01:01:35
回答 1查看 964关注 0票数 5

有可能得到类似这块地的东西吗?

从熊猫的数据,以一种类似的方式,我只是做简单的做2d-阴谋(df.plot())?

更确切地说:

我有从csv文件读取到熊猫DataFrames的数据,结构如下:

代码语言:javascript
运行
复制
1st level header        A        B       C       D        E         F 
2nd level header      2.0      1.0     0.2     0.4      0.6       0.8

        Index                                                      
     126.4348  -467048  -814795  301388  298430  -187654  -1903170 
     126.4310  -468329  -810060  304366  305343  -192035  -1881625 
     126.4272  -469209  -804697  305795  312472  -197013  -1854848 
     126.4234  -469685  -799604  305647  318936  -200957  -1827665 
     126.4195  -469795  -795708  304101  323922  -202192  -1805153 
     126.4157  -469610  -793795  301497  326780  -199323  -1791743 
     126.4119  -469213  -794362  298257  327092  -191547  -1790418 
     126.4081  -468687  -797499  294817  324717  -178875  -1802122 
     126.4043  -468097  -802853  291546  319800  -162225  -1825540 
     126.4005  -467486  -809663  288700  312745  -143334  -1857270 
     126.3967  -466863  -816878  286401  304170  -124505  -1892389 
     126.3929  -466210  -823335  284645  294827  -108228  -1925312 
     126.3890  -465485  -827966  283331  285520   -96733  -1950795 
     126.3852  -464637  -829997  282315  277018   -91559  -1964894 
     126.3814  -463617  -829104  281457  269965   -93242  -1965702 
     126.3776  -462399  -825487  280670  264824  -101170  -1953728 
     126.3738  -460982  -819857  279942  261819  -113660  -1931820 
     126.3700  -459408  -813317  279344  260927  -128242  -1904669 
     126.3662  -457757  -807177  279009  261885  -142112  -1877955 
     126.3624  -456143  -802715  279090  264233  -152667  -1857303 
     126.3585  -454700  -800940  279722  267380  -158023  -1847241 
     126.3547  -453566  -802397  280969  270692  -157406  -1850358 
     126.3509  -452862  -807050  282792  273579  -151350  -1866803 
     126.3471  -452672  -814262  285033  275591  -141627  -1894249 
     126.3433  -453030  -822898  287426  276486  -130942  -1928303 
     126.3395  -453910  -831501  289627  276273  -122426  -1963297 
     126.3357  -455223  -838544  291266  275222  -119021  -1993312 
     126.3319  -456834  -842695  292004  273824  -122882  -2013246 
     126.3280  -458571  -843048  291599  272725  -134907  -2019718 
     126.3242  -460252  -839292  289952  272620  -154497  -2011656 
          ...      ...      ...     ...     ...      ...       ... 

我想用它做什么

我想把这些列(它们是核磁共振谱)中的每一列都标出索引。在2D覆盖中,这是围绕matplotlib的熊猫包装的简单用法。然而,我想在它自己的“线”中绘制每个光谱,沿着第三轴,第二级标头作为滴答。我试着使用matplotlib的3D绘图功能,但它似乎只适用于实际具有三个等长数组的情况下,对于我的数据来说,这是没有意义的,因为每个频谱都记录在第二级标头的一个值上。

当我试图绘制3D图时,我是不是想得太复杂了?

我希望我的情节看起来可能不是真实的3D图形,而是一些特殊版本的覆盖2D情节吗?

我更愿意这么做

加分如下:

  • 只使用python
  • 只使用熊猫和材料库
  • 已经实现的功能

如果没有明显的python方法可以这样做,我也很高兴其他语言库也可以这样做,比如R或Octave。我只是不太熟悉这些,所以我可能无法适应这些语言中更多的黑客解决方案来满足我的需求。

这个问题可能非常类似,但据我所知,它不一定扩展到python以外的软件,也没有结果应该是什么的示例,所以我不确定对这个问题的回答是否真的对这个特定目的有帮助。

matplotlib的图库示例有什么问题?

正如兰里所指出的,matplotlib画廊的polygon3D接近了我的愿望。然而,它也有一些缺点,其中一些是大多数科学出版物所不能接受的:

  • 使用负值,整个情节会转移到我所称的“屏幕中央”,这看起来有点难看,很难从图形中提取信息,并使其与提供的示例不同。
  • 你得到了一个交互式的绘图窗口,它要求你找到一个角度,从这个角度你可以看到你需要看到的一切。这可能对一些数据探索任务是有益的,但是如果您使用脚本进行可视化,并且对图形稍加修改就会迫使您再次做一些手工工作,这将降低您期望的脚本的优势。
  • 如果您的值有很大的不同且不是线性的,比如[0,1,1.7,2.5,6.2],对于您的第三维空间,即第二级头,2d图与另一个图的距离是非常不同的,这是不可接受的,至少对于任何非编程的读者来说都是如此。
  • 这是相当长和技术的一个相当常见的绘图操作在光谱。如果我想要构建能够在某种背景下绘制3D图形的软件,那么代码的数量就很好了。对于科学来说,用少量的代码就能完成这样的事情会更好。
EN

回答 1

Stack Overflow用户

发布于 2017-04-08 20:01:21

我给出了一个用连续X和Y的数据绘图的例子,以及基于二级头的硬编码z。

代码语言:javascript
运行
复制
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import matplotlib
%matplotlib inline

df = pd.read_csv("C:\Users\User\SkyDrive\Documents\import_data.tcsv.txt",header=None)

fig = plt.figure()
ax = fig.gca(projection='3d')

# Plot a sin curve using the x and y axes.
x = df[0]
ax.plot(x, df[1], zs=2, zdir='z', label='A')
ax.plot(x, df[2], zs=1, zdir='z', label='B')
ax.plot(x, df[3], zs=0.2, zdir='z', label='C')
ax.plot(x, df[4], zs=0.4, zdir='z', label='D')
ax.plot(x, df[5], zs=0.6, zdir='z', label='E')
ax.plot(x, df[6], zs=0.8, zdir='z', label='F')

# Customize the view angle so it's easier to see that the scatter points lie
# on the plane y=0
ax.view_init(elev=-150., azim=40)

plt.show()

您必须使用view_init上的选项来旋转,并在您想要的地方得到轴。我不太清楚你的最终目标是什么,但这是结局。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37336342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档