Построение фазового портрета с несколькими цветами с помощью MATLAB - PullRequest
0 голосов
/ 27 мая 2018

Я хочу добавить кое-что, чтобы сделать мой фазовый портрет более понятным.Тем не менее, я ничего не могу найти (я нашел это https://se.mathworks.com/help/matlab/ref/colorspec.html https://se.mathworks.com/matlabcentral/fileexchange/11611-linear-2d-plot-with-rainbow-color https://se.mathworks.com/help/symbolic/mupad_ref/linecolortype.html), но это не то, что мне нужно.

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

Я нашел эту идею, которая кажется великолепной:

enter image description here

Я вообще не понимаю, что он сделал (кодПолагаю, здесь написано: https://blogs.mathworks.com/pick/2008/08/15/colors-for-your-multi-line-plots/), но было бы здорово, если бы я смог нарисовать функцию из одной строки, цвет которой меняется в зависимости от времени.Если, кроме того, как на картинке, у меня может быть шкала справа: это было бы здорово.

Итак, сейчас у меня есть это:

data = readtable('test.txt');
figure('Name','Phase'  , 'units','normalized','outerposition',[(8/100) (0.3- 16/100) 0.5 0.7]);
hold on
   plot(data{:,2},data{:,3}, 'k.', 'LineWidth',1.5 );
   plot(data{:,4},data{:,5}, 'r.', 'LineWidth',1.5  );
xL = xlim;
yL = ylim;
line([0 0], yL);  %x-axis
line(xL, [0 0]);  %y-axis   
      title(['Phase portrait'])
      xlabel('f')
      ylabel('f '' ')
hold off 

Я читаю значенияфункции в файле .txt, а затем я строю 2-й / 3-й столбцы и 4/5-й столбцы.Первый столбец - время эволюции.

У вас есть идеи?)?

Спасибо!

enter image description here

Ответы [ 2 ]

0 голосов
/ 27 мая 2018

Я нашел это, благодаря другому пользователю на stackoverflaw.

    data = readtable('4ressorspendule.txt');
n = numel(data.Var1);
c = size(data,2);

figure('Name','Phase'  , 'units','normalized','outerposition',[(8/100) (0.3 - 16/100) 0.5 0.7]);
for i=1:n
    hold on
    plot(data{i,2},data{i,3},'.','Color',[1 (1-i/n) 0] ,'MarkerSize',4);  
    plot(data{i,4},data{i,5},'.','Color',[0 (i/n) (1-i/n)],'MarkerSize',4);
end
xL = xlim;
yL = ylim;
line([0 0], yL);  %x-axis
line(xL, [0 0]);  %y-axis   
title(['Phase portrait'])
xlabel('f')
ylabel('f '' ')
hold off 
0 голосов
/ 27 мая 2018

Есть несколько способов сделать это, если честно.Однако это немного облегчает задачу, если вы сообщите нам, какие у вас данные о времени.Вы наносите свои временные данные на ось x (или y) или это другой дополнительный набор данных?Если это будет дополнительный набор данных, то вы можете рассматривать его как z-данные, нанесенные на ось Z или / и как цвет.Ниже приведен пример того, что вы можете сделать, создав 3D-график, но отображая его в 2D, что позволяет без особых проблем добавить цветовую панель.

x=0:5;
y=0:5;
z=rand(1,6); %random data to simulate your time
xx=[x' x']; %this allows you to plot the data using surf in 3d
yy=[y' y']; %same as for xx
z1=zeros(size(xx)); % we don't need z-data so we're making it a matrix of zeros
zc=[z' z']; %input here your time data values, if x/y then you can just use those instead of z
hs=surf(xx,yy,z1,zc,'EdgeColor','interp') %// color binded to "z" values, choose interp for interpolated/gradual color changes, flat makes it sudden
colormap('hsv') %choose your colormap or make it yourself
view(2) %// view(0,90)
hcb=colorbar; %add a colorbar
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...