python27 matplotlib: первый и последний связанный элемент
Привет, я нашел ту же проблему, но без ответа: введите описание ссылки здесь
Моя проблема в том, что я пытаюсь построить данные с помощью matplotlib, и он соединяет первую и последнюю точку данных. Я использую python27 и Windows 7. Моя проблема в том, чтобы показать полностью, поэтому я просто показываю некоторые части исходного кода. Сюжетная функция, как показано ниже:
def plot(x, aw,temperature):
plt.clf()
temperatureplot = plt.subplot(211)
awplot = plt.subplot(212)
temperatureplot.grid()
awplot.grid()
#set subplots
awplot.set_ylabel('water activity aw')
awplot.plot(x,aw)
awplot.margins(y=0.05) #adds a gap between maximum value and edge of diagram
temperatureplot.set_ylabel('Temperature in degree C')
temperatureplot.plot(x,temperature)
temperatureplot.margins(y=0.05)
awplot.set_xlabel('Time in [hm]')
plt.gcf().canvas.draw()
Я использую это, потому что я рисую это в Tkinter Gui и хочу иногда обновлять его. Сюжет выглядит так:
Мои ценности:
t = [161000, 161015...., 191115]
aw = [0.618,......, 0.532]
temperature = [23.7,....,24.4]
Это проблема, что я не начинаю с нуля в массиве t?
Если кто-то имеет подсказку или знает проблему, пожалуйста, помогите мне.
Ура Макс
4 ответа
Хороший вопрос! Была аналогичная проблема при построении данных с отметкой времени из кругового буфера. Другие ответы объяснили, что происходит.
Сюжет обрабатывает векторы в строгом порядке, рисует линию от первой координаты до второй и так далее. Но циклический буфер может начинаться с минимального времени в любой точке.
Таким образом, сюжет часто начинается где-то посередине окна графика с хорошим временем увеличения. Затем он достигает точки вставки и откатывается назад во времени к началу окна - рисует некрасивую линию - и затем возвращается к начальной точке.
Быстрое решение заменило эту строку:
plot(pTime, pPos)
с двумя линиями, строящими каждую половину в правильном порядке:
plot(pTime[ptr:], pPos[ptr:])
plot(pTime[0:ptr], pPos[0:ptr])
Pyplot соединяет первую (x,y) точку со второй (x,y) точкой, с третьей и так далее... так что, похоже, может быть (дубликат?) Низкое значение скрыто в конце вашего x
,
Ты можешь попробовать x == sorted(x)
перепроверить, если ваш список строго по возрастанию. Он вернется False
если это не так.
Возможно, вы захотите найти пару (x,y), прежде чем позвонить plot()
функции, поэтому я оставлю это вам пока.
У меня была похожая проблема, как вы можете видеть:
ДО
Я только что отсортировал x
используя это:
x = sorted(x)
И линия исчезла, как вы можете видеть: (Но данные искажены из-за сортировки).
ПОСЛЕ СОРТИРОВКИ
Вы также должны убедиться, что y
значения также должны быть соответствующим образом упорядочены для отсортированного x
, Окончательный результат здесь:
У меня просто была такая же проблема.
В моем случае я имел дело с 365 днями в году. Индексирование начинается с 0 и заканчивается в 365, в то время как номера дней начинаются с 1 и заканчиваются в 366, поэтому дата, соответствующая 366-й строке, была 1, и поэтому была линия, соединяющая конец сюжета с его началом. Я также должен был проверить високосные годы, потому что данные были собраны за период в 10 лет.
У меня такая же проблема. Решение, которое я нашел, было в файле.txt, где хранились мои данные. Набор данных существовал дважды в файле и поэтому вызывал соединение начальной и конечной точек с помощью matplotlib.
Удаление двойных данных и графика построены правильно. К счастью, два набора данных появились один за другим. Так что было легко удалить первую часть.
Поскольку в моем случае это был огромный сбор данных, это было неочевидно, и для этого потребовалось время.
Проблема возникла при создании txt-файла....
Так что все правильно с matplotlib.
Ура, Рик