Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在matplotlib中使用相当大(不是真正大)的数据集时出现问题_Python_Matplotlib_Plot - Fatal编程技术网

Python 在matplotlib中使用相当大(不是真正大)的数据集时出现问题

Python 在matplotlib中使用相当大(不是真正大)的数据集时出现问题,python,matplotlib,plot,Python,Matplotlib,Plot,我正在利用SDSS(斯隆数字天空测量)的数据来绘制和分析恒星的光谱。为此,我从他们的网站下载了一个.csv文件,从中提取每一行及其数据,然后绘制这些数据。数据的格式是波长、通量、最佳拟合、天空通量,但我只对波长和最佳拟合感兴趣。我只是想提一下,这样我的代码就更有意义了。我试着每10个和100个数据点运行一次,但我无法解决我的问题。任何帮助都将不胜感激。SDSS网站上有一张想要的结果图,我将其粘贴在下面: 下面是我的代码生成的图表(显然非常错误): 代码如下: import matplotli

我正在利用SDSS(斯隆数字天空测量)的数据来绘制和分析恒星的光谱。为此,我从他们的网站下载了一个.csv文件,从中提取每一行及其数据,然后绘制这些数据。数据的格式是波长、通量、最佳拟合、天空通量,但我只对波长和最佳拟合感兴趣。我只是想提一下,这样我的代码就更有意义了。我试着每10个和100个数据点运行一次,但我无法解决我的问题。任何帮助都将不胜感激。SDSS网站上有一张想要的结果图,我将其粘贴在下面:

下面是我的代码生成的图表(显然非常错误):

代码如下:

import matplotlib
import matplotlib.pyplot as plt
import numpy as np

with open("csvSpectrum1.txt", "r") as test:
    rawData = test.readlines()
test.close()
dataProcessed = []
for x in range(1, len(rawData)):
    line = rawData[x].split('\n')
    line.pop(1)     # I added this because the list always had a [''] in the end so I just removed that
    for data in line:
        finalData = data.split(',')
        dataProcessed.append([finalData[0], finalData[2]])
x = []
y = []

for point in dataProcessed:
    x.append(point[0])
    y.append(point[1])
    
plt.plot(x, y)
plt.savefig("plot1.png")


  • 提供这个
    • 使用此数据,问题中的代码将生成与问题中所示相同的绘图
  • 使用
将熊猫作为pd导入
将matplotlib.pyplot作为plt导入
数据='csvSpectrum'
#创建数据帧
df=pd.read\U csv(数据)
#集合索引
df.set_索引(“波长”,就地=真)
#显示数据帧
通量最佳拟合天空通量
波长
3798.394    18.219   17.414      0.0
3799.269    18.217   15.414      0.0
3800.144    18.215   14.973      0.0
3801.019    18.212   15.625      0.0
3801.894    18.210   15.786      0.0
#绘图数据帧
p=df.plot()
plt.yscale('log')

作为子地块
plt.图(figsize=(16,10))
对于i,枚举中的列(df.columns,1):
plt.子地块(3,1,i)
plt.绘图(测向索引,测向[col],标签=col)
plt.yscale('log')
plt.legend()

给出了读取数据的原始方法
  • 原始代码做了很多不必要的事情
  • 绘图不起作用,因为数据从未从
    str
    转换为
    float
    • 您需要
      x.append(浮点(点[0]))
      y.append(浮点(点[1]))
更新
data='csvSpectrum'
以开放式(数据,“r”)作为测试:
rawData=[test.readlines()]中的行的line.strip()#从每个字符串中删除\n
波长=列表()
最佳拟合=列表()
对于rawData[1:]中的x:#只需遍历原始数据行即可
x=x.split(',')#拆分行
append(float(x[0])#将数据添加到列表并转换为float
bestfit.append(float(x[2])#将数据添加到列表并转换为float
#密谋
p=plt.绘图(波长,最佳拟合)#生成最佳拟合线的绘图,如上所述

尝试使用pandas读取CSV文件。这样,您就不需要手动解析文件:将数据读入pandas DataFrame后,使用plot函数@luc。一方面是的,另一方面,OP已经有了一个工作系统,这不是问题所在。@Mad物理学家他们的系统实际上不工作,这就是为什么他们问这个问题。他们的错误很可能源于错误地解析数据。我试图提出一种更简单、更不容易出错的方法,这种方法符合行业惯例。主要问题是
dataProcessed.append([finalData[0],finalData[2]])
附加字符串而不是数字。它们需要转换为浮点:
float(finalData[0])
。当使用pandas
read\u csv
时,这些东西会自动运行。另外,使用numpy数组而不是列表将使一切都更快。很抱歉没有添加数据链接,但非常感谢@梅尔文很高兴这对你有用。此外,我还添加了一个您可能更喜欢的子地块选项。哦,酷,谢谢:)我明天再看:)