построение графика данных из текстового файла - PullRequest
0 голосов
/ 23 марта 2020

Я впервые создаю график на python. У меня есть текстовый файл, содержащий данные о «еженедельных средних показателях по газу». Всего их 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()

1 Ответ

1 голос
/ 23 марта 2020

Две ошибки, которые я могу обнаружить при чтении вашего кода:

  • Объект gasList уже является списком, поэтому, когда вы пишете x_coords = [gasList], вы создаете список списка, который будет не работает
  • строка y_coords=[1,53] создает список только с 2 значениями: 1 и 53. Когда вы строите график, вам нужно иметь столько же значений y, сколько и значений x, поэтому у вас должно быть 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()

enter image description here

...