Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 25.04.2020
Сообщений: 10

Графики по данным из файла

25.04.2021, 23:38. Показов 3878. Ответов 17

Студворк — интернет-сервис помощи студентам
Всем привет!

Подскажите, как отрисовывать графики из текстового файла.
Пишу программу на c++ и создаю в коде текстовый файл (точки для отрисовки функции z=x1*x2) вида:
{"x1": [-5, -4.9, -4.8, -4.7, -4.6, -4.5, -4.4, -4.3, -4.2, -4.1, -4, -3.9, -3.8, -3.7, -3.6, -3.5, -3.4, -3.3, -3.2, -3.1, -3, -2.9, -2.8, -2.7, -2.6, -2.5, -2.4, -2.3, -2.2, -2.1, -2, -1.9, -1.8, -1.7, -1.6, -1.5, -1.4, -1.3, -1.2, -1.1, -1, -0.9, -0.8, -0.7, -0.6, -0.5, -0.4, -0.3, -0.2, -0.1, 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 4, 4.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.7, 4.8, 5], "x2": [-5, -4.9, -4.8, -4.7, -4.6, -4.5, -4.4, -4.3, -4.2, -4.1, -4, -3.9, -3.8, -3.7, -3.6, -3.5, -3.4, -3.3, -3.2, -3.1, -3, -2.9, -2.8, -2.7, -2.6, -2.5, -2.4, -2.3, -2.2, -2.1, -2, -1.9, -1.8, -1.7, -1.6, -1.5, -1.4, -1.3, -1.2, -1.1, -1, -0.9, -0.8, -0.7, -0.6, -0.5, -0.4, -0.3, -0.2, -0.1, 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 4, 4.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.7, 4.8, 5], "z": [25, 24.01, 23.04, 22.09, 21.16, 20.25, 19.36, 18.49, 17.64, 16.81, 16, 15.21, 14.44, 13.69, 12.96, 12.25, 11.56, 10.89, 10.24, 9.61, 9, 8.41, 7.84, 7.29, 6.76, 6.25, 5.76, 5.29, 4.84, 4.41, 4, 3.61, 3.24, 2.89, 2.56, 2.25, 1.96, 1.69, 1.44, 1.21, 1, 0.81, 0.64, 0.49, 0.36, 0.25, 0.16, 0.09, 0.04, 0.01, 0, 0.01, 0.04, 0.09, 0.16, 0.25, 0.36, 0.49, 0.64, 0.81, 1, 1.21, 1.44, 1.69, 1.96, 2.25, 2.56, 2.89, 3.24, 3.61, 4, 4.41, 4.84, 5.29, 5.76, 6.25, 6.76, 7.29, 7.84, 8.41, 9, 9.61, 10.24, 10.89, 11.56, 12.25, 12.96, 13.69, 14.44, 15.21, 16, 16.81, 17.64, 18.49, 19.36, 20.25, 21.16, 22.09, 23.04, 25]}

Вот скрипт:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
import json
from matplotlib import cm
 
with open("func.txt", "r") as read_file:
    data = json.load(read_file)
 
x = data["x1"]
y = data["x2"]
z = data["z"]
 
 
fig = plt.figure()
ax = fig.gca(projection='3d')
 
 
ax.plot_trisurf(x, y, z, linewidth=0.2, antialiased=True, cmap=cm.coolwarm)
 
plt.show()
Но почему-то он не работает, подскажите, как это можно реализовать? Заранее спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.04.2021, 23:38
Ответы с готовыми решениями:

Графики по данным из Excel
Здравствуйте, не подскажите как построить график в Матлабе, используя данные из таблицы Exel. Значения Х и Y определены таблицей.

Необходимо построить графики по рассчитанным данным
Не получается построить график. Все данные уже рассчитаны. А также имеется скриншот как должны выглядеть графики.

Какие операции можно применять к целочисленным данным? К вещественным данным? К символьным данным?
не знаю как тветить на этот вопрос. Думалось мне что что к каждому типу данных можно применить все операции Добавлено через 42...

17
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,759
26.04.2021, 18:51
Лучший ответ Сообщение было отмечено u235 как решение

Решение

Замените ax.plot_trisurf...
на ax.scatter(x, y, z)
У вас линия, а не триангулированная поверхность.
Миниатюры
Графики по данным из файла  
1
0 / 0 / 0
Регистрация: 25.04.2020
Сообщений: 10
30.04.2021, 14:49  [ТС]
u235, у меня поверхность должна быть
0
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,759
30.04.2021, 15:14
Eka2, значит разбирайтесь что у вас не так с программой на C++, которая создает файл.
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
30.04.2021, 15:33
Eka2, три одномерных массива в трёхмерном пространстве - откуда тут может взяться поверхность?
0
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,759
30.04.2021, 16:36
dondublon, три одномерных вектора это еще ничего, можно было бы сделать перед trisurf триангуляцию Делоне для точек x,y. Но не в данном случае.
0
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,759
30.04.2021, 17:15
Как пример поверхности для точек:
Python
1
2
3
x=2*np.random.random(150)-1
y=2*np.random.random(150)-1
z=x*y
Миниатюры
Графики по данным из файла  
0
0 / 0 / 0
Регистрация: 25.04.2020
Сообщений: 10
02.05.2021, 16:49  [ТС]
u235, спасибо за ответ, поняла ошибку, исправила, все получилось.

Добавлено через 50 минут
u235, а можете подсказать, как исправить дальше мой код?
Мне нужно на эту поверхность добавить точки из другого файла.
По отдельности все работает правильно ( и точки рисуются и поверхность тоже), а вместе ничего не выводит, ошибок тоже.
dim - размерность, я передаю из c++ кода в качестве аргумента. Файл data записан в том же виде, как я писала выше.
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
#import json
import sys
 
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
import json
from matplotlib import cm
import math
dim = int(sys.argv[1])
with open("func.txt", "r") as read_file, open("data.txt", "r") as readsecond_file:
    data = json.load(read_file)
    file = json.load(readsecond_file)
 
for i in range(1,dim+1):
    x = data["x"+str(i)]
    for j in range(i+1,dim+1):
        y = data["x"+str(j)]
        z = data["z"]
 
for k in range(1,dim+1):
    X = file["x"+str(k)]
    for t in range(k+1,dim+1):
        Y = file["x"+str(t)]
        Z = file["z"]
        pointx = X
        pointy = Y
        pointz = Z
 
  
        fig = plt.figure()
        ax = Axes3D(fig)
        ax = fig.gca(projection='3d')
 
        ax.set(xlabel='x'+str(i), ylabel='x'+str(j), title='Graphic')
        ax.plot_trisurf(x, y, z, linewidth=0.2, antialiased=True, cmap=cm.coolwarm) 
        ax.scatter(pointx, pointy, pointz, c='#ba55d3', s=3)
plt.show()
0
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,759
02.05.2021, 17:33
У вас проблема была в файле с данными, если вы ее не решили, то ничего не получится.
попробуйте добавить импорт
Python
1
import matplotlib.tri as mtri
затем когда считали x,y,z нужно сделать триангуляцию
Python
1
triang=mtri.Triangulation(x,y)
затем строите поверхность
Python
1
ax.plot_trisurf(triang, z, linewidth=0.2, antialiased=True, cmap=cm.coolwarm)
Добавлено через 6 минут
Не внимательно прочитал вопрос.
Если нужны точки, то у вас все должно работать. scatter же есть. Проверьте данные которые вы передаете в scatter, корректны ли они.
0
0 / 0 / 0
Регистрация: 25.04.2020
Сообщений: 10
02.05.2021, 17:35  [ТС]
u235, спасибо за ответ. Я поправила файл.
Сейчас проблема именно с тем, что не добавляются точки на эту поверхность из другого файла. Этот код работает правильно.
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
#import json
import sys
 
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
import json
from matplotlib import cm
import math
dim = int(sys.argv[1])
with open("func.txt", "r") as read_file:
    data = json.load(read_file)
for i in range(1,dim+1):
    x = data["x"+str(i)]
    for j in range(i+1,dim+1):
        y = data["x"+str(j)]
        z = data["z"]
        fig = plt.figure()
        ax = Axes3D(fig)
        ax = fig.gca(projection='3d')
 
        ax.set(xlabel='x'+str(i), ylabel='x'+str(j), title='Graphic')
        ax.plot_trisurf(x, y, z, linewidth=0.2, antialiased=True, cmap=cm.coolwarm) 
plt.show()
аналогично, с другим файлом
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
#import json
import sys
 
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
import json
from matplotlib import cm
import math
dim = int(sys.argv[1])
with open("data.txt", "r") as read_file:
    file = json.load(read_file)
 
for i in range(1,dim+1):
    X = file["x"+str(i)]
    for j in range(i+1,dim+1):
        Y = file["x"+str(j)]
        Z = file["z"]
        pointx = X
        pointy = Y
        pointz = Z
 
  
        fig = plt.figure()
        ax = Axes3D(fig)
        ax = fig.gca(projection='3d')
 
        ax.set(xlabel='x'+str(i), ylabel='x'+str(j), title='Graphic')
        ax.scatter(pointx, pointy, pointz, c='#ba55d3', s=3)
plt.show()
этот код тоже работает. А соединить вместе не получается.
0
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,759
02.05.2021, 17:37
выложите txt файлы с данными. Вы же должны понимать, что без этого я ваш код не запущу и не проверю.
0
0 / 0 / 0
Регистрация: 25.04.2020
Сообщений: 10
02.05.2021, 17:45  [ТС]
в текстовом формате не получилось приаттачить, слишком большой размер
Вложения
Тип файла: docx data.docx (16.7 Кб, 6 просмотров)
Тип файла: docx func.docx (44.2 Кб, 3 просмотров)
0
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,759
02.05.2021, 17:51
Eka2, сделайте архив zip, rar, 7z или tar.gz
0
0 / 0 / 0
Регистрация: 25.04.2020
Сообщений: 10
02.05.2021, 17:53  [ТС]
Точно)
Вложения
Тип файла: rar files.rar (4.6 Кб, 3 просмотров)
0
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,759
02.05.2021, 17:59
Eka2, func.txt - в архиве пустой
0
0 / 0 / 0
Регистрация: 25.04.2020
Сообщений: 10
02.05.2021, 18:04  [ТС]
случайно удалила данные, когда копировала в word. вот новые файлы.
Вложения
Тип файла: rar files.rar (19.8 Кб, 6 просмотров)
0
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,759
02.05.2021, 18:22
Лучший ответ Сообщение было отмечено Eka2 как решение

Решение

У меня все строит
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
import sys
 
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
import json
from matplotlib import cm
import math
#dim = int(sys.argv[1])
dim=2
with open("func.txt", "r") as read_file:
    data = json.load(read_file)
with open("data.txt", "r") as read_file:
    file = json.load(read_file)
for i in range(1,dim+1):
    x = data["x"+str(i)]
    X = file["x"+str(i)]
    for j in range(i+1,dim+1):
        y = data["x"+str(j)]
        z = data["z"]
        Y = file["x"+str(j)]
        Z = file["z"]
        pointx = X
        pointy = Y
        pointz = Z
        fig = plt.figure()
        ax = Axes3D(fig)
        ax = fig.gca(projection='3d')
 
        ax.set(xlabel='x'+str(i), ylabel='x'+str(j), title='Graphic')
        ax.plot_trisurf(x, y, z, linewidth=0.2, antialiased=True, cmap=cm.coolwarm) 
        ax.scatter(pointx, pointy, pointz, c='#ba55d3', s=3)
        
plt.show()
Миниатюры
Графики по данным из файла  
1
0 / 0 / 0
Регистрация: 25.04.2020
Сообщений: 10
02.05.2021, 18:25  [ТС]
u235, Спасибо вам большое
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.05.2021, 18:25
Помогаю со студенческими работами здесь

Диаграмма по данным из файла
Всем доброго здоровичка!!! Помогите пожалуйста с задачкой: Имеется текстовый файл (прилагается). Открывается с помощью OFD. Его...

Отчеты по данным из файла
Добрый день. Вот такой вопрос. Есть файл с данными. Каждая строчка некая запись. Я делаю так: считываю построчно и записываю в...

Цикл по данным из файла
Всем привет. Подскажите следующее: Имеется файл excel столбец A ( имя столбца id). Excel id 1312 32132 321321 3213465 ...

Сортировка по данным из файла
Здравствуйте. Помогите, пожалуйста, с написанием программы, в которой нужно выполнить сортировку фамилий учащихся по алфавиту. Сами фамилии...

Построить окружности по данным из файла
Задача такова. Имеется файл, в котором записаны тройки чисел, которые соответствуют координатам центра и радиусу окружности, этих троек...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru