我有一个问题\问题。我需要用文件中的数字绘制图形(我做了),然后我需要绘制一条连接开始和结束的线,并计算这两条线之间的区域。我尝试做出很多变化,但我不知道如何制作它......
我尝试通过matplotlib.pyplot库
这里的数字'在开始和之后添加连接线之后我应该得到什么。现在我需要黑线和蓝线之间的calcutale square。 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()
答案 0 :(得分:2)
for i in range(1,2)
是一个只迭代一次的循环。也许您计划增加迭代次数?如果是这样,请记住,加载数据一次更快,而不是在for循环中加载多次。您可以使用带有np.genfromtxt
参数的usecols
来指定所需的列。
要查找曲线下方的区域,您可以使用 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])