Python 使用不同阵列长度绘制3D熊猫数据框中的光谱数据
有可能得到像这样的东西吗 从一个熊猫数据帧,以一种类似于我只需做2d绘图(Python 使用不同阵列长度绘制3D熊猫数据框中的光谱数据,python,pandas,data-visualization,Python,Pandas,Data Visualization,有可能得到像这样的东西吗 从一个熊猫数据帧,以一种类似于我只需做2d绘图(df.plot())的方式 更准确地说: 我将csv文件中的数据读入具有以下结构的熊猫数据帧: 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
df.plot()
)的方式
更准确地说:
我将csv文件中的数据读入具有以下结构的熊猫数据帧:
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
... ... ... ... ... ... ...
我想用它做什么
我想根据索引绘制这些色谱柱(它们是核磁共振谱)。
在二维覆盖中,这是matplotlib周围pandas包装的简单用法。
然而,我想沿着第三个轴绘制每个光谱的“线”,第三个轴的第二级标题如下所示
滴答声。
我尝试使用matplotlib的3D绘图功能,但它似乎只适用于实际具有三个等长数组的情况,
在我的数据中,这是没有意义的,因为每个光谱都是为第二级标题中的一个值记录的
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()
当我试着做一个3D绘图的时候,我是不是想的太复杂了
我想让我的图看起来可能不是一个真实的3D图,而是一些特殊版本的叠加2D图
我想怎么做
奖励积分:
- 仅使用python
- 仅使用pandas和matplotlib
- 已实现的功能
- 如果是负值,整个情节就会变成我想要的样子 称之为“屏幕中间”,这看起来有点难看,让人觉得 很难从图形中提取信息并使其与众不同 根据提供的示例
- 您将获得交互式绘图窗口,该窗口要求您查找 从这个角度你可以看到你需要看到的一切。那个 可能适用于某些数据探索任务,但如果使用 用于可视化的脚本和对图形的微小更改 将迫使您再次执行一些手动工作,这将降低 您期望从脚本中获得的优势
- 如果您的值差异很大且不是线性的,那么
像
,对于你的第三维度,也就是第二维度 在这种情况下,2d图的距离非常不同 这是不可接受的,至少对任何人来说都是如此 阅读出版物的非节目观众[0,1,1.7,2.5,6.2]
- 对于一个非常普通的绘图操作来说,这是一个相当长且技术性的过程 在光谱学方面。如果我愿意的话,代码的数量是可以的 构建可以在某些上下文中绘制3D绘图的软件。科学it 最好能完成这样的事情 使用少量的代码
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上的选项来旋转并获得所需的轴。我不太清楚你的最终目标是什么,但这是最后的情节
正如您链接到的帖子中的某个人所指出的,这是一个很好的资源,可以查看您想要的可视化是否/如何实现。通过图库,我想说有两个3D绘图候选,1)和2)。如果我确信这两个例子都是您想要的,我会发布一个答案。是的,matplotlib图库总体上确实很棒。3d多边形绘图非常接近,但有一些东西使它无法用于科学出版物。我将把这些补充到问题中。