【问题标题】:Plotting in Python via matplotlib.pyplot (calculate the area)通过 matplotlib.pyplot 在 Python 中绘图(计算面积)
【发布时间】:2014-12-16 13:01:54
【问题描述】:

我有一个问题\问题。我需要通过从文件中获得的数字(我做了)绘制图表,然后我需要绘制一条连接起点和终点的线,并计算这两条线之间的面积。我尝试了很多变化,但我不知道我怎么能做到..

我正在尝试通过 matplotlib.pyplot 库来实现

在添加“开始和和之间的连接线”之后我应该得到的“数字”,现在我需要黑线和蓝色之间的计算正方形。 PS黑色的有点直:)

这里有一些代码,我的数据文件... http://pastebin.com/g40bAzPR

#!/path/to/python -tt

# numerical data
# python GraphicalPart.py ../dataFile.txt

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

def startDivide(fileName):
 for i in range(1,2):
    inputFile = open(fileName)
    outputFile = open(fileName + "_" + str(i) + "_out.csv", "w")
    floatList = []
    for line in inputFile.readlines():
        data = line.split(" ")
        string = data[i]
        if string.startswith('-'): #remove '-'
            string = string[1:]
        floatList.append(float(string))

    floatList.sort() #sorting the list of data

    for item in floatList:
        outputFile.write("%s\n" % item)

    outputFile.close() 
    inputFile.close()

    data1=np.genfromtxt(fileName + "_" + str(i) + '_out.csv', skip_header=1)
    plt.plot(data1) 
    plt.savefig(fileName + "_" + str(i) + "_.png")
    plt.clf()

def main():
 if len(sys.argv) != 2:
  print "Not enough arguments. *_data.txt file only!"
 else:
  startDivide(sys.argv[1])

if __name__ == "__main__":
 main()

【问题讨论】:

  • 我的意思是,计算'figure'的平方,它是在开始和结束之间的线之后获得的
  • 在帖子中添加了更多详细信息

标签: python python-2.7 graph matplotlib plot


【解决方案1】:

for i in range(1,2) 是一个只迭代一次的循环。也许您计划增加迭代次数?如果是这样,请记住,加载数据一次 比在 for 循环中多次加载更快。您可以使用 np.genfromtxtusecols 参数来指定所需的列。

要找到曲线下的面积,您可以使用 np.trapz。 要找到两条曲线之间的面积,请从下方曲线下方的面积中减去上方曲线下方的面积。假设对角线始终在数据曲线上方:

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

def startDivide(filename):
    data = np.genfromtxt(filename, dtype=None, usecols=[1])
    data = np.abs(data)
    data.sort()
    np.savetxt("{}_1_out.csv".format(filename), data)
    plt.plot(data)
    plt.plot([0,len(data)-1], [data[0], data[-1]])
    plt.savefig("{}_1_.png".format(filename))
    area = np.trapz([data[0], data[-1]], dx=len(data)-1) - np.trapz(data)
    print(area)

if __name__ == "__main__":
    startDivide(sys.argv[1])

【讨论】:

  • 感谢您的回答,关于for i in range(1,2),这是为了测试,以后我会在这里使用整列 (1,8).. 是的,你的代码看起来比我的好 :) 但我收到了一个错误的“文件名”,例如“NameError:全局名称“文件名”未定义......”:\
  • 我试过你在我的代码上绘制线和计数区域 - 效果很好!多谢。能否请您为我的主题投票,我需要更多分数 :) 谢谢
猜你喜欢
  • 2017-05-29
  • 1970-01-01
  • 1970-01-01
  • 2019-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-09
  • 2017-06-14
相关资源
最近更新 更多