С Новым годом! Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 28.08.2019
Сообщений: 9
1

Прочитать файл и нарисовать график

28.08.2019, 12:15. Показов 1772. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста с решением задачи! Мне дали файл и API прочесть файл и нарисовать график
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Задачу с прочтением файла была сделана
получилось 
for i=1:20
Data=Data1(1:200,i);  %  матрица с данными размерами 200 на 20
Data=Data2(1:200,i);  %  матрица с высотой данных размерами 200 на 20
DataA(i)=DataA;        % если я правильно понял это позиции моих данных( координаты по строкам) 1 на 20
DataB(i)=DataB;
DataC(i)=DataC;
end
 
plot(Data1,Data2,'цвет')  % создает график который я хочу ( c ним все нормально )
hold on
plot(Data1(DataA:DataB),Data2,'цвет') % а тут начинаются проблемы пишет ошибку, что размеры не совпадают
plot(Data1(DataB:DataC),Data2,'цвет') 
plot(Data1(Data1:DataB),Data2,'цвет') 
plot(Data1(Data1:DataC),Data2,'цвет') 
getframe  % тут создается анимация всех значений
hold off
Тема похожа, помогите пожалуйста

Добавлено через 25 минут
Заметил ошибку
Matlab M
1
plot(Data1(1:DataC),Data2,'цвет')
вот так оно выглядит

Добавлено через 43 минуты
Matlab M
1
2
Data1=Data1(1:200,i); 
Data2=Data2(1:200,i);
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.08.2019, 12:15
Ответы с готовыми решениями:

Нарисовать график
Ребят, помогите нарисовать график, дали в институте на самообучение , программа замудренная, как не...

нарисовать график
x*x+2*y*y=1 получается ж надо выразить y y =((1-(x.^2))/(2)).^(1/2); а там же вычисляется +-...

Нарисовать график
Здравствуйте помогите пожалуйста разобраться где я ошибся графи не рисует. Надо нарисовать график...

Нарисовать график кусочной функции
Краткие методические указания Создать два варианта сценария для построения, оформления и вывода...

13
6954 / 4985 / 2106
Регистрация: 02.02.2014
Сообщений: 13,242
28.08.2019, 12:33 2
Цитата Сообщение от Remlin1968 Посмотреть сообщение
Мне дали файл
не мешало бы и нам увидеть этот файл и конкретную постановку задачи.
0
0 / 0 / 0
Регистрация: 28.08.2019
Сообщений: 9
28.08.2019, 12:50  [ТС] 3
К несчастью я этот файл даже копировать не могу, но скидываю эксель вариант из матлаба
0
6954 / 4985 / 2106
Регистрация: 02.02.2014
Сообщений: 13,242
28.08.2019, 12:52 4
а что мешает сам оригинал-файл скинуть? в архив его и на скрепку.
0
0 / 0 / 0
Регистрация: 28.08.2019
Сообщений: 9
28.08.2019, 12:58  [ТС] 5
Файл в экселе

мешает, пишет, что только администрация имеет право использовать этот файл( в матлабе и с++ он при этом отлично читается)

Добавлено через 7 минут
Значения Data я немного укоротил
Вложения
Тип файла: xls DataA-C.xls (23.0 Кб, 2 просмотров)
0
6954 / 4985 / 2106
Регистрация: 02.02.2014
Сообщений: 13,242
28.08.2019, 13:10 6
ну а сама постановка задачи где?
что с чем рисовать-то?

Цитата Сообщение от Remlin1968 Посмотреть сообщение
Код
Data1(DataA:DataB)
DataA, DataB - дробные числа - не могут быть индексами для Data1.
0
0 / 0 / 0
Регистрация: 28.08.2019
Сообщений: 9
28.08.2019, 13:15  [ТС] 7
Извините, я отчаивался и решил сделать график для Data2, ( где DataA-C) это области в Data2.
Matlab M
1
2
3
plot(Data1,Data2,'цвет')  
hold on
plot(Data1,Data2(DataA(1):DataB(1)),'цвет')
как то так это должно быть( с учетом того DataA-C это позиция по строкам)
0
6954 / 4985 / 2106
Регистрация: 02.02.2014
Сообщений: 13,242
28.08.2019, 13:20 8
все равно непонятно...

вот у вас есть группа 1 (data1, data2) и группа 2 (dataa-c), группы разные по длине.
хотя бы схематично нарисуйте (в paint), что с чем надо строить.
и помните, что дробные числа не могут быть индексами массивов.
0
0 / 0 / 0
Регистрация: 28.08.2019
Сообщений: 9
28.08.2019, 13:36  [ТС] 9
Вот схема как выглядит этот файл - желтый квадрат это зона с DataA по DataB

т.е. при построении графика plot(x,y) мы не может обращаться к дробным числам, даже когда значения y большей части дробные ?
Миниатюры
Прочитать файл и нарисовать график  
0
6954 / 4985 / 2106
Регистрация: 02.02.2014
Сообщений: 13,242
28.08.2019, 13:44 10
т.к. в моем распоряжении только excel-файл, то код может быть таким
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
clc; clear all;
Data1=xlsread('DataA-C.xls','gtbz','A2:A87');
Data2=xlsread('DataA-C.xls','gtbz','B2:B87');
DataA=xlsread('DataA-C.xls','gtbz','D1:W1');
DataB=xlsread('DataA-C.xls','gtbz','D2:W2');
DataC=xlsread('DataA-C.xls','gtbz','D3:W3');
 
%%
clf;
for i=1:20
   ind=find(Data2>DataA(i) & Data2<DataB(i));
   plot(Data1,Data2,'b',...
        Data1(ind),Data2(ind),'ro');
   pause(0.3)
end
1
483 / 427 / 205
Регистрация: 04.03.2011
Сообщений: 1,259
28.08.2019, 13:45 11
Когда вы пишите Data1(1:4) - Вы обращаетесь к индексам (номерам массивов)
0
6954 / 4985 / 2106
Регистрация: 02.02.2014
Сообщений: 13,242
28.08.2019, 13:45 12
Цитата Сообщение от Remlin1968 Посмотреть сообщение
при построении графика plot(x,y) мы не может обращаться к дробным числам
при построении графика нет проблем с дробными числами...

еще раз повторяю, дробные числа не могут быть ИНДЕКСАМИ массивов
1
0 / 0 / 0
Регистрация: 28.08.2019
Сообщений: 9
28.08.2019, 14:09  [ТС] 13
Ваш код работает отлично, но я не пойму на счет DataC
Matlab M
1
2
3
4
5
6
7
8
9
for i=1:20
   ind=find(Data2>DataA(i) & Data2<DataB(i));
   plot(Data1,Data2,'b',Data1(ind),Data2(ind),'ro');
    hold on
   k=find(Data2>DataC(i) );
   plot(Data1,Data2,'b',Data1(k),Data2(k),'d');
   hold off
   pause(10)
end
Мне оно создает участок только DataC
0
6954 / 4985 / 2106
Регистрация: 02.02.2014
Сообщений: 13,242
28.08.2019, 14:15 14
Лучший ответ Сообщение было отмечено Remlin1968 как решение

Решение

hold on/off мешает
вариант
Matlab M
1
2
3
4
5
6
7
8
9
for i=1:20
   ind=find(Data2>DataA(i) & Data2<DataB(i));
   k=find(Data2>DataC(i));
   
   plot(Data1,Data2,'b',...
       Data1(ind),Data2(ind),'ro',...
       Data1(k),Data2(k),'d');
   pause(0.3)
end
1
28.08.2019, 14:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.08.2019, 14:15
Помогаю со студенческими работами здесь

Создать функцию и нарисовать график
Все на изображении...

Написать программу и нарисовать график
Здравствуйте, помогите пожалуйста написать программы и рисовать график. ...

Как нарисовать график функций
Здравствуйте, помогите пожалуйста нарисовать график функций. Дано уравнения...

Прочесть данные из файла .mat и нарисовать график
Нужно написать программу, которая будет считывать данные из файла .mat, рисовать по ним график и...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru