【发布时间】:2013-05-10 06:08:44
【问题描述】:
几周以来,我一直在尝试从 .CSV 文件在同一个图上绘制 3 组 (x, y) 数据,但我一无所获。我的数据最初是一个 Excel 文件,我已将其转换为 .CSV 文件,并使用 pandas 按照以下代码将其读入 IPython:
from pandas import DataFrame, read_csv
import pandas as pd
# define data location
df = read_csv(Location)
df[['LimMag1.3', 'ExpTime1.3', 'LimMag2.0', 'ExpTime2.0', 'LimMag2.5','ExpTime2.5']][:7]
我的数据格式如下:
Type mag1 time1 mag2 time2 mag3 time3
M0 8.87 41.11 8.41 41.11 8.16 65.78;
...
M6 13.95 4392.03 14.41 10395.13 14.66 25988.32
我正在尝试绘制time1 vs mag1、time2 vs mag2 和 time3 vs mag3,都在同一个情节上,但我得到的是 time.. vs @ 987654332@,例如。代码:
df['ExpTime1.3'].plot()
当我想要的是 'ExpTime1.3' 与 'LimMag1.3' 时,我得到 'ExpTime1.3'(y 轴)相对于 M0 到 M6(x 轴)绘制,带有 x 标签 M0 - @ 987654340@.
如何获得
'ExpTime..'与'LimMag..'的图,所有 3 组数据都在同一个图上?如何在 x 轴上为
'LimMag..'值(也在 x 轴上)获取M0-M6标签?
自从尝试了 askewchan 的解决方案(由于未知原因没有返回任何图)以来,我发现如果我更改数据帧索引(df.index ) 到 x 轴 (LimMag1.3) 的值。但是,这似乎意味着我必须通过手动输入所需 x 轴的所有值使其成为数据索引来将每个所需的 x 轴转换为数据帧索引。我有大量数据,这种方法太慢了,我一次只能绘制一组数据,当我需要在一张图上为每个数据集绘制所有 3 个系列时。有没有办法解决这个问题?或者有人可以提供一个理由和解决方案,为什么我用 askewchan 提供的解决方案没有任何情节?\
针对nordev,我再次尝试了第一个版本,但没有产生任何情节,甚至没有一个空图。每次我输入 ax.plotcommands 之一时,我都会得到以下类型的输出:
[<matplotlib.lines.Line2D at 0xb5187b8>],但是当我输入命令plt.show()什么都没有发生。
当我在 askewchan 的第二个解决方案的循环之后输入 plt.show() 时,我收到一条错误消息,说 AttributeError: 'function' object has no attribute 'show'
我对我的原始代码做了更多的摆弄,现在可以通过使索引与 x 轴相同 (LimMag1.3) 来获得带有代码 df['ExpTime1.3'][:7].plot() 的 ExpTime1.3vs LimMag1.3 的图,但我无法在同一个图上获得其他两组数据。如果您有任何进一步的建议,我将不胜感激。我在 Windows 7(64 位)上通过 Anaconda 1.5.0(64 位)和 spyder 使用 ipython 0.11.0,python 版本是 2.7.4。
【问题讨论】:
-
只是一个想法;在这种情况下,将
M0-M6作为 x 轴上的标签没有实际意义,因为每个M..-标签都有 三个不同的LimMag..-值,意思是每个标签都必须放置在轴上的三个不同位置。这最终看起来很混乱,而不是信息丰富。 -
plt定义为什么?应该不是'function' object你熟悉matplotlib和pyplot的使用吗? -
您好 askewchan,回答您的问题,我对 matplotlib、pylab、python 完全不熟悉;事实上,我从来没有做过任何类型的编程,也没有使用过 Excel 以外的任何东西——因此很困难..
-
@user2324693 试试看这里开始绘图:matplotlib.org/users/pyplot_tutorial.html
-
您好 nordev,带有 log x 轴的解决方案可能是最好的,减去末端标签,因为它们不正确,即 M0 不是最低值的光谱类别。但是,当我尝试运行它时,我收到一条关于范围的错误消息,即“期望整数,但得到浮点数”。数据是小数,但我不知道如何解决这个问题,所以它会期望浮动,因为我不明白你的代码。
标签: csv matplotlib pandas