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.

Ура, Рик

Другие вопросы по тегам