Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
2 / 2 / 1
Регистрация: 18.03.2018
Сообщений: 145

Отрисовка графика функции

26.11.2020, 17:11. Показов 2666. Ответов 19

Студворк — интернет-сервис помощи студентам
Доброго времени суток.
Не могу сделать задание, уже вроде бы всё разобрал, но не могу понять в чём ошибка, может кто подсказать?
Файл csv лежит в корне и заполнен

Язык знаю очень поверхностно.




Название: Вариант.PNG
Просмотров: 109

Размер: 3.5 Кб

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import matplotlib.pyplot
import numpy
import csv
 
data = []
with open('test.csv')as csvFile:
    spamReader = csv.reader(csvFile)
    for row in spamReader:
        data = " ".join(row).split()
 
data = (int(elem) for elem in data)
 
x = numpy.arange(-10.0, 10.0, 0.01)
y = numpy.tan(data[0]*x**2 + data[1]*x + data[3])
 
matplotlib.pyplot.xlabel(r'Ось OX', color = 'r')
matplotlib.pyplot.ylabel(r'Ось OY', color = 'b')
matplotlib.pyplot.title(r'$y = tg (ax^2 + bx + c)' , color = 'g')
matplotlib.pyplot.plot(x, y, 'r')
 
matplotlib.pyplot.show()
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.11.2020, 17:11
Ответы с готовыми решениями:

Отрисовка графика функции
Создания графика функции на СИ y=2sin(x){e}^{x/\alpha } Что то не работает помогите найти ошибку #include <graphics.h> #include...

Отрисовка графика функции многочлена
Здравствуйте, задание звучит так: отрисовка произвольного многочлена с произвольными степенями (возможно, отрицательными и...

Отрисовка графика функции: как преобразовать координаты?
Рисую график функции sin x - 2y = 1 Сначала отрисовываю координатные оси и координатную сетку. За единицу на осях координат принимаю 20...

19
2 / 2 / 1
Регистрация: 18.03.2018
Сообщений: 145
27.11.2020, 12:37  [ТС]
Переделал немного, ошибка получается уже другого рода.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# y = tg (ax^2 + bx + c)
import matplotlib.pyplot
import numpy
import csv
 
data = []
with open("test.tsv") as tsvfile:
    tsvreader = csv.reader(tsvfile, delimiter="\t")
    for row in tsvreader:
        data = " ".join([str(i) for i in row])
 
x = numpy.arange(-10.0, 10.0, 0.01)
y = numpy.tan(data[0]*x**2 + data[1]*x + data[3])
 
matplotlib.pyplot.xlabel(r'Ось OX', color = 'r')
matplotlib.pyplot.ylabel(r'Ось OY', color = 'b')
matplotlib.pyplot.title(r'$y = tg (ax^2 + bx + c)' , color = 'g')
matplotlib.pyplot.plot(x, y, 'r')
 
matplotlib.pyplot.show()
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
27.11.2020, 13:02
Цитата Сообщение от LSTSnaiper Посмотреть сообщение
str(i)
а зачем ты переводишь в строку, а не в число?

Добавлено через 27 секунд
Цитата Сообщение от LSTSnaiper Посмотреть сообщение
" ".join
а это зачем?
0
2 / 2 / 1
Регистрация: 18.03.2018
Сообщений: 145
27.11.2020, 14:18  [ТС]
Цитата Сообщение от DmFat Посмотреть сообщение
а зачем ты переводишь в строку, а не в число?
потому что я не знаю вообще конструкции языка и нам его никто не объяснял, дали в короткие сроки сделать задание и вот пытаюсь хоть что-то понять

.join([str(i) for i in row]) - эта конструкция была на одном из сайтов и была подписана как приведение к int.

Зная с++ не на уровне про, я не понял почему str(i) и списал это на "особенности" питона.


Изначальный вариант я подсмотрел у другого потока и он работал.
Цитата Сообщение от LSTSnaiper Посмотреть сообщение
data = []
with open('test.csv')as csvFile:
    spamReader = csv.reader(csvFile)
    for row in spamReader:
        data = " ".join(row).split()
data = (int(elem) for elem in data)
Если напишите как в массив передать считанные значения, я буду благодарен.
Миниатюры
Отрисовка графика функции  
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
27.11.2020, 14:55
LSTSnaiper,

Python
1
2
3
4
5
6
7
8
9
10
11
import csv
 
# table.tsv
#   1;2;3
#   4;5;6
 
with open("table.tsv") as tsvfile:
    tsvreader = csv.reader(tsvfile, delimiter=";")
    data =[list(map(int, row)) for row in tsvreader]
 
print(data)  # [[1, 2, 3], [4, 5, 6]]
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
27.11.2020, 14:58
Вы бы ошибки текстом постили.
По третьей - ожидается строка, пршёл int. По второй - попытка умножить массив numpy, т. е. числа, на символ. Внимательнее с типами.
0
2 / 2 / 1
Регистрация: 18.03.2018
Сообщений: 145
27.11.2020, 15:07  [ТС]
Цитата Сообщение от dondublon Посмотреть сообщение
Вы бы ошибки текстом постили.
Это уже дело вкуса. Большинству скрины информативнее.

Цитата Сообщение от dondublon Посмотреть сообщение
попытка умножить массив numpy, т. е. числа, на символ
У меня же x вроде как не символ, или я как-то не так понимаю что на что умножается?
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
27.11.2020, 15:10
Цитата Сообщение от LSTSnaiper Посмотреть сообщение
Это уже дело вкуса. Большинству скрины информативнее.
Нет, это не дело вкуса. Во-первых, это неудобно - надо кликать. Во-вторых, картинки не поддаются поиску. В-третьих, как следствие из двух первых причин, есть правило форума - задачи надо постить в виде текста. Тут не совсем задачи, но подобно.
Цитата Сообщение от LSTSnaiper Посмотреть сообщение
У меня же x вроде как не символ, или я как-то не так понимаю что на что умножается?
х - не символ, а вот data[0] - очень даже.
0
2 / 2 / 1
Регистрация: 18.03.2018
Сообщений: 145
27.11.2020, 15:10  [ТС]
Цитата Сообщение от DmFat Посмотреть сообщение
import csv
# table.tsv
#   1;2;3
#   4;5;6
with open("table.tsv") as tsvfile:
    tsvreader = csv.reader(tsvfile, delimiter=";")
    data =[list(map(int, row)) for row in tsvreader]
print(data)  # [[1, 2, 3], [4, 5, 6]]
Всё отлично, но мне печатать их не нужно, нужно передавать в мою формулу
Python
1
y = numpy.tan(data[0]*x**2 + data[1]*x + data[3])
При таком коде вытекает другая ошибка

Python
1
2
3
data = []
with open("test.tsv") as tsvfile:
    tsvreader = csv.reader(tsvfile, delimiter="\t")
Python
1
 operands could not be broadcast together with shapes (3,) (2000,)
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
27.11.2020, 15:11
Лучший ответ Сообщение было отмечено LSTSnaiper как решение

Решение

LSTSnaiper, эх, все надо делать самому, держи, старался - заслужил:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import csv
import numpy
import matplotlib.pyplot
 
 
with open("table.tsv") as tsvfile:
    tsvreader = csv.reader(tsvfile, delimiter=";")
    data =[list(map(float, row)) for row in tsvreader]
 
x = numpy.arange(-10.0, 10.1, 0.01)
for a, b, c in data:
    y = numpy.tan(a*x**2 + b*x + c)
    matplotlib.pyplot.plot(x, y, label=f'a = {a}, b = {b}, c = {c}')
 
matplotlib.pyplot.xlabel(r'Ось OX', color = 'r')
matplotlib.pyplot.ylabel(r'Ось OY', color = 'b')
matplotlib.pyplot.title(r'$y = tg (ax^2 + bx + c)' , color = 'g')
matplotlib.pyplot.legend()
matplotlib.pyplot.show()
1
2 / 2 / 1
Регистрация: 18.03.2018
Сообщений: 145
27.11.2020, 15:14  [ТС]
Цитата Сообщение от dondublon Посмотреть сообщение
х - не символ, а вот data[0] - очень даже.
Я понимаю что считываемые символы из файла считаются строкой, и что их нужно преобразовать к int что бы в итоге умножать число лежащее по адресу data[0] .
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
27.11.2020, 15:15
Цитата Сообщение от LSTSnaiper Посмотреть сообщение
Я понимаю что считываемые символы из файла считаются строкой, и что их нужно преобразовать к int что бы в итоге умножать число лежащее по адресу data[0] .
Ну, уже неплохо.
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
27.11.2020, 15:17
LSTSnaiper, В коде выше ты можешь пихать таблицу с несколькими строками данных и получить несколько различных графиков.

Добавлено через 23 секунды

Не по теме:

dondublon, да видно что он понимает, просто питон не знает, грех не помочь.

0
2 / 2 / 1
Регистрация: 18.03.2018
Сообщений: 145
27.11.2020, 15:18  [ТС]
Цитата Сообщение от DmFat Посмотреть сообщение
эх, все надо делать самому, держи, старался - заслужил:
Извини, я бы и сам, может, разобрался, да нет времени на это.
Дали с++ даже до конца не разобрав его дают ещё 3 языка сверху и в голове образуется каша.
В итоге ни один , ни второй, ни 3 язык ты по факту не знаешь на должном уровне.
Не знаю чем думают преподы...
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
27.11.2020, 15:20
LSTSnaiper, да нормально, главное что ты понимаешь, а не очередной халявщик. А про учебу, это да. Сам так же учусь.)
0
2 / 2 / 1
Регистрация: 18.03.2018
Сообщений: 145
01.12.2020, 11:26  [ТС]
Господа, можно ещё немного помощи в вопросе.
Оказалось что у меня вообще другая функция....
Название: Безымянный.png
Просмотров: 62

Размер: 3.2 Кб
Правда я не совсем понимаю почему первый логарифм без аргумента. Может ошибка, а может я чего-то не знаю...
Приписал руками просто 25 что бы вообще хоть что-то попробовать, но столкнулся с шибкой.

Code
1
12 only size-1 arrays can be converted to Python scalars
Я так понимаю функция math.log() не может работать с диапазоном значений x (то есть с массивом данных).
Не понимаю как исправить это, есть идеи у кого-то? Может задание вообще не верное...


Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import matplotlib.pyplot
import numpy
import math
import csv
 
with open("test.tsv") as tsvfile: # безопасное открытие файла (выполнится в любом случае и закроется файл)
    tsvreader = csv.reader(tsvfile, delimiter="\t")
    data =[list(map(int, row)) for row in tsvreader]
 
x = numpy.arange(-10.0, 10.1, 0.01) # задаются параметры интервала с шагом
for a, b, c, d in data:
    y = math.log(25,a)*math.log(c*x+d,b)
    matplotlib.pyplot.plot(x, y, label = f'a = {a}, b = {b}, c = {c}, d = {d}') # функция создания графика
 
matplotlib.pyplot.xlabel(r'Ось OX',fontsize = '14' ,color = 'r') # устанавливает подпись оси х
matplotlib.pyplot.ylabel(r'Ось OY',fontsize = '14' , color = 'b') # устанавливает подпись оси у
matplotlib.pyplot.title(r'$y = tg (ax^2 + bx + c)$' ,fontsize = '14' , color = 'g')
matplotlib.pyplot.legend() # добавление легенды
matplotlib.pyplot.show() # отображение окна с графиком
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
01.12.2020, 12:03
LSTSnaiper, numpy.log
0
2 / 2 / 1
Регистрация: 18.03.2018
Сообщений: 145
01.12.2020, 12:32  [ТС]
Цитата Сообщение от dondublon Посмотреть сообщение
numpy.log
Пробовал я с ним, не могу разобраться что за а out array, там же получается 2 аргумент не base.
Я попробовал подставить туда data , но, это не то что нужно как я понимаю... Сложно разобраться без детального знания языка ...
Если даже и создать 2 массив и в него что будет записываться, как указать какое основание будет у этого numpy.log() пока что на просторах интернета ничего нормально объясняющего не нашёл.

Добавлено через 20 минут
Сделал так, нашёл на одном сайте инфу как задать пользовательское основание.
Вроде заработало, но это не точно что я всё правильно по заданию сделал, задание всё равно, как мне кажется кривое ..
Python
1
y = numpy.log(25)/numpy.log(a)*numpy.log(c*x+d)/numpy.log(b)
0
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,759
01.12.2020, 13:11
LSTSnaiper, Итоговая формула в таком виде неправильна. Лучше расставьте скобки.
0
2 / 2 / 1
Регистрация: 18.03.2018
Сообщений: 145
01.12.2020, 13:31  [ТС]
Цитата Сообщение от u235 Посмотреть сообщение
Итоговая формула в таком виде неправильна. Лучше расставьте скобки.
Я подправил формулу в соответствии с вариантом задания, так, наверное, будет правильнее.
Python
1
y = numpy.log(numpy.log(c*x+d)/numpy.log(b))/numpy.log(a)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.12.2020, 13:31
Помогаю со студенческими работами здесь

Отрисовка графика
Доброго времени суток! Никак не могу нарисовать график функции. До этого рисовал (в моём понимании) более сложные графики,...

Отрисовка графика
Помогите заполнить массив точек в соответствие с формулой (2 * x - 3 * Math.Log10(x) - 3) и сохранением корректного отображение с учетом...

Отрисовка графика
Всем привет. Помогите пожалуйста разобраться. Имеется функция:s(t)=cos(2*Pi*13*t+(Pi/6)). Нашел функции для построения(на картинке...

Отрисовка графика
Если взять много данных для отрисовки свечного графика, к примеру из файла csv, то чувствую, что это затратный способ. Если это так, то в...

Графика, отрисовка диода
есть функция рисует на вертикальной линии диод void VD(pos q,String S,pos p) { if(q) { t->Pen->Width=1; ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru