Построение чисел в файле относительно их положения в файле - PullRequest
0 голосов
/ 28 декабря 2018

Я строю набор чисел относительно их положения в файле.

Например, первые несколько строк файла показаны ниже:

93
90
77
79
83
96
111
115
115
118
129
138
153
147
151
164
166
162
161
157
165
148
161
161
143

Теперь я хочудля построения каждого числа относительно номера строки в файле.

X axis - line number in the file
Y axis - the value of the number at that specific line

Я написал следующий код, который строит график для первых 5000 чисел в файле:

import matplotlib.pyplot as plt
import sys

X, Y = [], []
counter = 1

for line in open(sys.argv[1], 'r'):
  X.append(float(counter))
  Y.append(float(line))
  counter = counter + 1
  if counter > 5000:
    break

plt.plot(X, Y)
plt.show()

График выглядиткак показано ниже:

enter image description here

Однако я хочу, чтобы ось X показывала более подробные интервалы, и график должен выглядеть следующим образом:

enter image description here

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

Ваша проблема в том, что вы используете plot (который отображает массивы в виде непрерывной линии), в то время как matplotlib имеет другие функции, такие как matplotlib.pyplot.vlines, которые могут сделать запрошенное изображение.

Эта функция избавляет вас от необходимости делатьсписок X в вашем примере (который ускоряет вашу программу), если в вашем файле нет пустой строки.

В противном случае вы можете поставить ноль в списке Y , еслистрока пуста, вот это vlines docs

Я думаю, что нет необходимости переписывать вашу программу, так как теперь это просто.

0 голосов
/ 28 декабря 2018

Пояснение

Вы получили это почти правильно, все, что вам нужно сделать, это изменить тип используемого графика.

Код

plt.bar(X, Y, align='center', width=0.2)
plt.show()

Измените ширину в зависимости от толщины стержня, который вам нужен.

Ресурсы

https://matplotlib.org/api/_as_gen/matplotlib.pyplot.bar.html http://www.scipy -lectures.org / интро / Matplotlib / matplotlib.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...