Форум сайта python.su
Всем привет! Как правильно вставить спойлер?
Начал изучать Python для создания графика сна для себя.
Оказалось что для моей задачи нужно освоить помимо matplotlib'а так же numpy, еще похоже pandas и возможно что-то из anaconda.
Я боюсь что освоение всех этих библиотек сейчас окажется для меня непосильной задачей. Выбрать нужную информацию для обучения - трудно, мне становится интересно все и я изучаю все подряд, так я не знаю когда сделаю график.
Пишу в надежде, что Вы мне подскажите на какие методы, функции или библиотеки стоит обратить внимание. Изучить внимательно их работу, что бы это помогло в решении моей задачи. Что бы я не изучал сейчас весь обучающий материал подряд, а сконцентрировался на нужных инструментах.
1. Операционная система: Windows 10pro 22h2
2. Версия Python 3.11
3. Список установленных библиотек полученный командой pip list:
Package Version
—————— ————
anaconda 0.0.1.1
certifi 2023.11.17
charset-normalizer 3.3.2
colorama 0.4.6
contourpy 1.2.0
cycler 0.12.1
data 0.4
decorator 5.1.1
fonttools 4.45.1
funcsigs 1.0.2
future 0.18.3
ghostscript 0.7
idna 3.6
ImageMagic 0.2.1
kiwisolver 1.4.5
latex 0.7.0
loguru 0.7.2
matplotlib 3.8.2
numpy 1.26.2
packaging 23.2
pandas 2.1.3
pi 0.1.2
Pillow 10.1.0
pip 21.3.1
pycairo 1.25.1
pyparsing 3.1.1
PyQt5 5.15.10
PyQt5-Qt5 5.15.2
PyQt5-sip 12.13.0
python-dateutil 2.8.2
pytz 2023.3.post1
requests 2.31.0
setuptools 60.2.0
shutilwhich 1.1.0
six 1.16.0
tempdir 0.7.1
tk 0.1.0
tornado 6.4
tzdata 2023.3
urllib3 2.1.0
wheel 0.37.1
win32-setctime 1.1.0
wxPython 4.2.1
WARNING: You are using pip version 21.3.1; however, version 23.3.1 is available.
4. Код на данный момент.
import numpy as np import matplotlib.pyplot as plt import pandas as pd # x = [-1, 0, 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] # ноябрь 2023г x = np.linspace(-1, 30, 32) y1 = [5, 5, 6, 7, 6, 7, 8, 8, 8, 6, 6, 10, 6, 10, 5, 9, 8, 9, 7, 9, 6, 7, 6, 9, 5, 8, 6, 6, 6, 6, 5, 6] # количество часов сна с 01.11.2023г по 16.11.2023г y2 = [5, 3, 5, 0, 8, 5, 4, 4, 4, 5, 5, 4, 3, 3, 0, 5, 2, 8, 5, 8, 6, 3, 5, 4, 4, 4, 2, 3, 3, 3, 0, 0] # шаги в километрах y3 = [-1, -1, -1, 0, 0, 1, 1, 0, 1, 1, 0, 2, -2, -1, 1, 1, 0, -1, 0, 1, -2, -2, -2, -2, -2, 0, 0, 0, 0, 1, -2, 0] # моё настроение 0 - норм, -1 - слабо, -2 - ужасно, 1 - хорошо, 2 - отлично # start = pd.Timestamp('2023-10-30') # end = pd.Timestamp('2023-12-31') # t = np.linspace(start.value, end.value, 63) # t = pd.to_datetime(t) plt.title("График СНА", fontsize=25, color='grey') plt.grid() plt.xlabel('Дата', fontsize=15, color='grey') plt.ylabel("Часов СНА", color='grey', fontsize=15) plt.plot(x, y1, "skyblue", x, y2,"coral", x, y3, "grey") plt.show()
Отредактировано ivashamagnus1989 (Дек. 3, 2023 14:26:21)
Прикреплённый файлы:
xk8e5bov36ez.jpg (141,3 KБ)
Офлайн
Вот тебе код
#!/usr/bin/env python3 import turtle def set_title(text): turtle.title(text) def draw_coordinates(width, height, scale=20): # draw OX turtle.penup() turtle.backward(width // 2) turtle.pendown() turtle.forward(width) turtle.setheading(160) turtle.forward(10) turtle.penup() turtle.backward(10) turtle.pendown() turtle.setheading(-160) turtle.forward(10) turtle.penup() turtle.backward(10) turtle.pendown() turtle.setheading(0) turtle.write('X') turtle.penup() turtle.backward(width // 2) turtle.pendown() turtle.penup() turtle.forward(scale) turtle.setheading(90) turtle.pendown() turtle.forward(3) turtle.write('1') turtle.backward(6) turtle.penup() turtle.forward(3) turtle.setheading(0) turtle.backward(scale) turtle.pendown() # draw OY turtle.setheading(90) turtle.penup() turtle.backward(height // 2) turtle.pendown() turtle.forward(height) turtle.setheading(240) turtle.forward(10) turtle.penup() turtle.backward(10) turtle.pendown() turtle.setheading(300) turtle.forward(10) turtle.penup() turtle.backward(10) turtle.pendown() turtle.setheading(90) turtle.write('Y') turtle.penup() turtle.backward(height // 2) turtle.setheading(0) turtle.pendown() turtle.penup() turtle.setheading(90) turtle.forward(scale) turtle.setheading(180) turtle.pendown() turtle.forward(3) turtle.penup() turtle.forward(9) turtle.write('1') turtle.backward(9) turtle.pendown() turtle.backward(6) turtle.penup() turtle.forward(3) turtle.setheading(90) turtle.backward(scale) turtle.pendown() turtle.setheading(0) turtle.penup() turtle.setposition(-scale, -scale) turtle.write('O') turtle.setposition(0, 0) turtle.pendown() def draw_point(x, y, scale=20): saved_position = turtle.position() turtle.penup() turtle.setposition(x * scale, y * scale) turtle.dot(2) turtle.setposition(saved_position) turtle.pendown() def draw_text(x, y, text='', scale=20): saved_position = turtle.position() turtle.penup() turtle.setposition(x * scale, y * scale) turtle.write(text) turtle.setposition(saved_position) turtle.pendown() def draw_function(startx, endx, function, step=0.001, eps=0.000001, color='black', text=''): saved_color= turtle.pencolor() turtle.pencolor(color) turtle.tracer(1000) x = startx while abs(endx - x) >= eps: draw_point(x, function(x)) x += step draw_text(x, function(x), text) turtle.tracer(1) turtle.pencolor(saved_color) def draw_all(): draw_coordinates(400, 800) draw_function(-4, 4, function_parabola_x2, color='red', text='f(x) = x ^ 2') draw_function(-4, 4, function_hyperbola_x, color='blue', text='f(x) = 1 / x') draw_function(-4, 4, function_line_x, color='gray', text='f(x) = x') draw_function(-4, 4, function_line_m_2x_p_4, color='pink', text='f(x) = -2x + 4') def function_parabola_x2(x): return x * x def function_hyperbola_x(x): return 1 / x def function_line_x(x): return x def function_line_m_2x_p_4(x): return -2 * x + 4 def main(): set_title('График функции') draw_all() turtle.mainloop() if __name__ == '__main__': main()
Отредактировано py.user.next (Дек. 3, 2023 21:05:31)
Прикреплённый файлы:
screenshot.png (18,9 KБ)
Офлайн
ivashamagnus1989Для сложной matplotlib надо использовать сложную numpy. numpy ты ещё, может быть, усвоишь. Её нормальный человек писал. А вот matplotlib очень сложной сделана. Если ты и освоишь matplotlib, то натолкнёшься в ней на какие-нибудь ограничения, на какие-нибудь нюансы. Захочешь, например, разметить оси определённым способом, а matplotlib не даст такой возможности. И таким образом всё это изучение matplotlib будет напрасным. Будут у тебя хреновые графики, с которыми ты ничего не можешь сделать. Вроде графики красивые и подробные и точные, а оси в них не разметишь никак. И там не только с осями эта фигня встречается. Ты ещё попробуй им попользоваться без numpy, оно тебе обязательно скажет что-нибудь вроде “давай сюда numpy, ты обязан подать numpy”, хотя с чего вдруг? Ну такое.
Я боюсь что освоение всех этих библиотек сейчас окажется для меня непосильной задачей.
ivashamagnus1989
5. Задача.
Хочу сделать график отхода ко сну и подъёма (прикрепил изображение для понимания). Наложением на него кривых с другими показателями за день.
График сна:
По “y” время от 00:00 до 24:00. Отметки начала сна и подъёма, период сна залить цветным фоном.
По “x” календарные дни.
Наложение на этот график кривых:
- длительности сна.
- шагов в день.
- настроение/самочувствие в день.
- периодов приема препаратов и физиотерапий.
Я еще не знаю в каком конечном виде будет выглядеть график, поэтому пока что такой общий запрос к тому какая информация мне нужна для обучения.
Мне еще предстоит узнать как на нем отобразить все необходимые разные шкалы.
Можно ли сделать мультиграфик в котором будут отключаться и выключаться наложением кривые параметров за день.
Само обновляемый график. Который будет брать данные сам из текстового файла в который я буду их экспортировать.
Придумать удобный способ как предоставить легко и просто в наглядном виде этот график своему врачу не таская ноутбук с собой и что бы ему не пришлось устанавливать python с ide.
Как сделать просмотр многомесячного или годового графика в мелком масштабе. Сейчас научится делать его на один месяц для начала.
Приходит мужик устраиваться в оркестр.Так вот на пятой ноте точно обосрёшься и всё.
У него спрашивают:
- На каких инструментах вы играете?.
Он отвечает:
- Ни на каких.
- А что же вы у нас будете делать в оркестре?
Он отвечает:
- Я могу пропердеть любую композицию.
Ему говорят удивлённо:
- Пропукайте Баха.
Он пропердел, все в удивлении.
- А Гайдна сможете?
- Нет… думаю, не смогу…
Его спрашивают:
- Почему?
- Да там такой момент есть один, вот в нём на пятой октаве там на ноте ля я просто боюсь обосраться.
Отредактировано py.user.next (Дек. 3, 2023 21:58:29)
Офлайн
py.user.nextPython не лучшее решение для новичка что бы реализовать графики?
Это всё, знаешь, тебе тяжеловато будет достичь
Офлайн
ivashamagnus1989Тебе намекают что проблема не в питоне
Офлайн
ivashamagnus1989Вообще работа с графикой на любом языке программирования - не лучшее занятие для новичка. Потому что для того, чтобы тебе работать с графикой, тебе нужно знать всё, из чего она там состоит, понимать, что такое экран, что такое пиксель, сколько в нём каналов цветовых, ещё канал прозрачности там бывает, куда что рисуется, в какую сторону там и прочее. Надеяться на то, что кто-то сделал библиотеку функций, в которой есть примитивы, можно, но это тоже новичку не поможет, потому что ему всё равно надо понимать, как оно устроено внутри и что именно автоматизирует эта библиотека. Потому что можно просто не понять, как там какая-нибудь функция рисует прямую линию или кривую линию какую-то. Вот тебе дают функцию, в которой предлагают указать угол для кривой. А это угол чего? Он со знаком или без? Он в градусах или в радианах? Как правило, этого всего тебе не будут писать, подразумевая, что ты не новичок, а уже всё знаешь и просто хочешь своё время сэкономить с помощью этой функции из библиотеки функций. То есть тебе и математику надо знать, хотя бы школьную хорошо, и ещё языки программирования и библиотеки для них, как это всё применяется. Где-то вообще надо взять исходники библиотеки, прочитать их и понять, как она рисует, чтобы точно знать. Когда-то я так изучал, как питон округляет числа через round(), как он выравнивает строки по центру, как он понимает, где центр. Вот для этого я читал исходники питона. Почему я это делал? Мне было так это интересно? Да мне вообще нахрен не нужно было это! Просто чтобы запомнить, как они работают в точности, я открыл документацию, а там просто никакой информации нет, так, в общих чертах только. А когда я исходники открыл, там хоть стало понятно, что он делает вообще, когда строки выравнивает или числа округляет (экономическое округление там какое-то, отличается от обычного). Так вот тебе тоже придётся это делать. Ну открой исходники прямо сейчас и посмотри, как они написаны. Думаешь, они для школьников пишутся, для новичков? Нет, они пишутся для компьютера, чтобы быстрее и оптимальнее работать. И найти вообще какую-то там функцию, которая там что-то делает конкретное, очень сложно, потому что над ней, как правило, 100500 забубённых обёрток, которые тоже что-то там делают.py.user.nextPython не лучшее решение для новичка что бы реализовать графики?
Это всё, знаешь, тебе тяжеловато будет достичь
ZerGДа, я согласен. Возьми и через matplotlib сделай одну прямую, а потом наложи на неё другую прямую, чтобы это всё было на одном графике. Точек там много не надо, всего по две точки на каждую прямую. Ну посмотришь, что ты даже эту простейшую хуйню сделать не можешь. А почему? Как так? Почему она не делается сама? Программирование - это не для дебилов и не для школьников. Где ты там насмотрелся вдохновляющих видео про то, что программистом может стать каждый? На YouTube-каналах от всяких волосатых блогеров, которые сами в этом вообще ничего не смыслят? Ну поздравляю, тебе запихнули просто в голову рекламу говнокурсов из говношкол и всё. Они просто из дураков бабки вытягивают и всё, и для этого они эту хуйню и несут через всяких инфлюенсеров, в 90% случаев воообще ничего не смыслящих в этом всём.
Создай тестовый проект и поиграйся с матплотом
Отредактировано py.user.next (Дек. 6, 2023 00:57:55)
Офлайн
Отлично! Спасибо py.user.next, он достаточно толково мне объяснил то что изучить только, то что нужно для решения задачи на Python нельзя, придется изучать широко, глубоко - а это то чего я хотел избежать, а без этого нельзя.
Мне нужен сейчас только график, пожалуй лучше для этого поищу готовые программные решения. Я узнал что даже в Excel можно сделать интерактивный, большой график с наложениями.
Спасибо, форум помогает!
Офлайн
ivashamagnus1989Ну Excel чреват тем, что там кроме графика больше ничего не будет. Если в питоне ты можешь проникать из чисел в графики и обратно из графиков в числа, то в Excel всё не так хорошо связано внутри. Попробуй загрузи числа для графика из файла - уже испытаешь проблемы с этим. А в питоне это всё легко делается.
Я узнал что даже в Excel можно сделать интерактивный, большой график с наложениями.
Офлайн
py.user.nextСправедливости ради - стоит заметить - что на питоне легко будет питонисту
Офлайн
ZerGНе, школьнику какому-нибудь тоже будет несложно загрузить данные из файла в оперативную память. А вот в Excel'е попробуй из JSON-файла что-то загрузи. Там и экселисту будет сложновато.
что на питоне легко будет питонисту
Офлайн