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

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

25.10.2020, 01:15. Показов 4717. Ответов 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
Сообщений: 558
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
Сообщений: 558
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
Сообщений: 558
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
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru