绘制文本文件中的一行数据
graphing a line of data from a text file
这是我第一次在 python 上创建图表。我有一个包含 "weekly gas averages" 数据的文本文件。其中有 52 个(这是一年的数据)。我知道如何读取数据并将其制成列表,我想,如果我自己提出要点,我可以掌握制作图表的基础知识。但是我不知道如何将两者联系起来,因为将文件中的数据依次放入我的X轴,然后制作我自己的Y轴(1-52)。我的代码是我慢慢放在一起的一堆想法。任何帮助或指导都会很棒。
import matplotlib.pyplot as plt
def main():
print("Welcome to my program. This program will read data
off a file"\
+" called 1994_Weekly_Gas_Averages.txt. It will plot the"\
+" data on a line graph.")
print()
gasFile = open("1994_Weekly_Gas_Averages.txt", 'r')
gasList= []
gasAveragesPerWeek = gasFile.readline()
while gasAveragesPerWeek != "":
gasAveragePerWeek = float(gasAveragesPerWeek)
gasList.append(gasAveragesPerWeek)
gasAveragesPerWeek = gasFile.readline()
index = 0
while index<len(gasList):
gasList[index] = gasList[index].rstrip('\n')
index += 1
print(gasList)
#create x and y coordinates with data
x_coords = [gasList]
y_coords = [1,53]
#build line graph
plt.plot(x_coords, y_coords)
#add title
plt.title('1994 Weekly Gas Averages')
#add labels
plt.xlabel('Gas Averages')
plt.ylabel('Week')
#display graph
plt.show()
main()
我在阅读您的代码时发现了两个错误:
- 对象
gasList
已经是一个列表,所以当您编写 x_coords = [gasList]
时,您正在创建一个列表列表,这将不起作用
y_coords=[1,53]
行创建了一个仅包含 2 个值的列表:1 和 53。绘制时,您需要具有与 x 值一样多的 y 值,因此您应该具有 52 个值在该列表中。您不必全部手写,您可以使用函数 range(start, stop)
为您完成
也就是说,使用已经为您编写的函数,您可能会收获很多。例如,如果您使用模块 numpy
(import numpy as np
),那么您可以使用 np.loadtxt()
来读取文件的内容并在一行中创建一个数组。尝试自己解析文件会更快,更不容易出错。
最终代码:
import matplotlib.pyplot as plt
import numpy as np
def main():
print(
"Welcome to my program. This program will read data off a file called 1994_Weekly_Gas_Averages.txt. It will "
"plot the data on a line graph.")
print()
gasFile = "1994_Weekly_Gas_Averages.txt"
gasList = np.loadtxt(gasFile)
y_coords = range(1, len(gasList) + 1) # better not hardcode the length of y_coords,
# in case there fewer values that expected
# build line graph
plt.plot(gasList, y_coords)
# add title
plt.title('1994 Weekly Gas Averages')
# add labels
plt.xlabel('Gas Averages')
plt.ylabel('Week')
# display graph
plt.show()
if __name__ == "__main__":
main()
这是我第一次在 python 上创建图表。我有一个包含 "weekly gas averages" 数据的文本文件。其中有 52 个(这是一年的数据)。我知道如何读取数据并将其制成列表,我想,如果我自己提出要点,我可以掌握制作图表的基础知识。但是我不知道如何将两者联系起来,因为将文件中的数据依次放入我的X轴,然后制作我自己的Y轴(1-52)。我的代码是我慢慢放在一起的一堆想法。任何帮助或指导都会很棒。
import matplotlib.pyplot as plt
def main():
print("Welcome to my program. This program will read data
off a file"\
+" called 1994_Weekly_Gas_Averages.txt. It will plot the"\
+" data on a line graph.")
print()
gasFile = open("1994_Weekly_Gas_Averages.txt", 'r')
gasList= []
gasAveragesPerWeek = gasFile.readline()
while gasAveragesPerWeek != "":
gasAveragePerWeek = float(gasAveragesPerWeek)
gasList.append(gasAveragesPerWeek)
gasAveragesPerWeek = gasFile.readline()
index = 0
while index<len(gasList):
gasList[index] = gasList[index].rstrip('\n')
index += 1
print(gasList)
#create x and y coordinates with data
x_coords = [gasList]
y_coords = [1,53]
#build line graph
plt.plot(x_coords, y_coords)
#add title
plt.title('1994 Weekly Gas Averages')
#add labels
plt.xlabel('Gas Averages')
plt.ylabel('Week')
#display graph
plt.show()
main()
我在阅读您的代码时发现了两个错误:
- 对象
gasList
已经是一个列表,所以当您编写x_coords = [gasList]
时,您正在创建一个列表列表,这将不起作用 y_coords=[1,53]
行创建了一个仅包含 2 个值的列表:1 和 53。绘制时,您需要具有与 x 值一样多的 y 值,因此您应该具有 52 个值在该列表中。您不必全部手写,您可以使用函数range(start, stop)
为您完成
也就是说,使用已经为您编写的函数,您可能会收获很多。例如,如果您使用模块 numpy
(import numpy as np
),那么您可以使用 np.loadtxt()
来读取文件的内容并在一行中创建一个数组。尝试自己解析文件会更快,更不容易出错。
最终代码:
import matplotlib.pyplot as plt
import numpy as np
def main():
print(
"Welcome to my program. This program will read data off a file called 1994_Weekly_Gas_Averages.txt. It will "
"plot the data on a line graph.")
print()
gasFile = "1994_Weekly_Gas_Averages.txt"
gasList = np.loadtxt(gasFile)
y_coords = range(1, len(gasList) + 1) # better not hardcode the length of y_coords,
# in case there fewer values that expected
# build line graph
plt.plot(gasList, y_coords)
# add title
plt.title('1994 Weekly Gas Averages')
# add labels
plt.xlabel('Gas Averages')
plt.ylabel('Week')
# display graph
plt.show()
if __name__ == "__main__":
main()