Форум программистов, компьютерный форум, киберфорум
Python: Научные вычисления
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/21: Рейтинг темы: голосов - 21, средняя оценка - 4.95
5 / 5 / 0
Регистрация: 25.09.2017
Сообщений: 569

Некорректное построение графиков: matplotlib

25.10.2020, 01:15. Показов 4795. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Почему в matplotlib график (прямые линии) строятся не совсем от заданных координат по оси абцисс?


Там какие-то смещения и в глаза это бросается резко. Значения все проверены. Всё верно.

Как с этим бороться, неужели набивать значения повыше?
Миниатюры
Некорректное построение графиков: matplotlib  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.10.2020, 01:15
Ответы с готовыми решениями:

При построении 2х графиков накладывается ylabel и title в Matplotlib
Добрый день! Буду краток, всё будет видно из примера. Недавно из Matlab начал, строить графики в python 3.8 с помощью Matplotlib. ...

Matplotlib построение изолиний по своим данным
Обычно изолинии(в Matplotlib) строятся по функции от X и Y Но мне надо построить по своим данным. У меня есть три списка s_x,...

Pandas построение графиков
У меня есть DataFrame. В нём есть колонки, time и some_data. Можно ведь как-то создать график , где по x будет some_data, а по y - time?

6
5 / 5 / 0
Регистрация: 25.09.2017
Сообщений: 569
25.10.2020, 01:18  [ТС]
И причём, чем толще линия, тем сильнее смещение
0
578 / 411 / 69
Регистрация: 09.01.2018
Сообщений: 1,363
25.10.2020, 12:03
Приведите свой код и данные (хотя-бы часть, которая по вашему мнению рисуется "неверно").
1
5 / 5 / 0
Регистрация: 25.09.2017
Сообщений: 569
25.10.2020, 14:19  [ТС]
Цитата Сообщение от passant Посмотреть сообщение
Приведите свой код и данные (хотя-бы часть, которая по вашему мнению рисуется "неверно").

у меня 2 объекта оси, на одной рисуется вот эта синяя вертикальная линия, на другой графики красным.

Для той оси, которая рисует синюю линию заданы границы:

Python
1
ax2.set_xlim(0, x_end)
Задал границы для второй оси:

Python
1
ax.set_xlim(0, x_end)
Всё хорошо.

вот код:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import matplotlib.pyplot as plt
 
fig, ax = plt.subplots()
    
    
 
ax2 = ax.twiny()
 
count_max = 0
    
 
x_vals = []
labels = []
 
data =  [[(139.35, 456), (139.34, 200), (139.33, 63), (139.31, 81), (139.3, 8147), (139.29, 3858), (139.28, 5626), (139.27, 83), (139.26, 192), (139.25, 2), (139.24, 9), (139.23, 503)], [(139.29, 6229)]]
 
 
for bunch in data:
     next_c = get_max_count(bunch)# здесь я получаю макс. элемент по второму элементу из всех кортежей в списке bunch
     labels.append(str(crr))# объект datetime.time его взятие опущено из кода
 
 
      for cost, count in bunch:
            xs = [count_max, count_max+count]
            ys = [cost]*2
            ax.plot(xs, ys, 'r', linewidth=4)
        
        
     ax.set_xlim(0, count_max+next_c)
        
     x_vals.append(count_max)
     ax2.set_xlim(0, count_max + next_c)
            
     ax2.set_xticks(x_vals)
     ax2.set_xticklabels(labels)
 
     count_max += next_c
 
for xc in x_vals[1:]:
        plt.axvline(x = xc, linewidth=1)
plt.show()
И всё равно, с такими толщинами линий (если они разные по толщине), то они залезают за границы, которые тоньше. Вот вертикальная синяя линия построена при x= 8147 и координаты красной линии при y= 139.29 (это прерывистый график) по оси абцисс: (8147, 14376) для линии при y = 139.30 --- (0, 8147), но они залезают за эту синюю линию.

Если сделать толщины линий одинаковые, то залезания нет.
Миниатюры
Некорректное построение графиков: matplotlib  
0
578 / 411 / 69
Регистрация: 09.01.2018
Сообщений: 1,363
25.10.2020, 17:42
Поставьте параметр linewidth=1, если вам нужна такая графическая точность.
0
5 / 5 / 0
Регистрация: 25.09.2017
Сообщений: 569
25.10.2020, 18:07  [ТС]
Цитата Сообщение от passant Посмотреть сообщение
Поставьте параметр linewidth=1, если вам нужна такая графическая точность.
Да, я знаю, что если у линий будет одинаковая толщина, то проблема исчезнет. Но в ином случае, кроме как чуть удлинить или укоротить линии проблему не решить. Пока только такой рецепт, если у линий достаточная длина:

Python
1
2
3
4
 if count > 200:
                xs = [count_max+100, count_max+count-100]
 else:
                xs = [count_max, count_max+count]
0
578 / 411 / 69
Регистрация: 09.01.2018
Сообщений: 1,363
25.10.2020, 19:29
Понять, что происходит можно, нарисовав scatter-график и там поигравшись с размером точки. Точка всегда рисуется так, что-бы ее центр совпадал с точной координатой, а если вам надо не точка, а кружок - то его центр будет соответствовать данным, а вокруг будет закрашенная область заданного (произвольно) радиуса. И это абсолютно логично при анализе данных.
То-же самое происходит, когда рисуем plot-график.

Поэтому вам надо решить, что вам надо. Если надо обязательно точно отрисовывать график - то понятно, что ширина линии должна быть минимальной, т.е. 1 пиксель. И тогда никто никуда не смещается, за линии не заходит и т.д.
Если ваша задача сделать красивый график, эстетически грамотно выверив ширину столбиков и пр. с игнорированием точности - ну тогда да, придется изощряться. Но вообще говоря, Matplotlib создан не для этих целей.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.10.2020, 19:29
Помогаю со студенческими работами здесь

Построение графиков функций на языке Python с использованием модуля SymPy
Не могли бы вы скинуть мне примеры построения графиков функций на Python'е c использованием модуля SymPy?

Выделение пересечений графиков matplotlib
Имеется код, отрисовывающий три трехмерные функции с помехой Возможно ли как то выделить места их пересечений? Чтоб например в этих...

Отрисовка графиков библиотекой matplotlib
Категорически приветствую всех форумчан! Проблема следующего характера: пишу на малине программу для обработки данных, данные принимает с...

Matplotlib сетка графиков точечных диаграм по двум столбцам
Создаю с помощью matplotlib сетку графиков точечных диаграм по двум столбцам. Не могу понять логику построения цикла. Выходит...

[matplotlib] Разработка программ для построения графиков функции
Разработка программ для построение графиков функции Нужно использовать библbотеку matplotlib


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru