
Can you make the output of this graph have multiple colors, like one timing bit is one color and the next one is another color.
5 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Crish
el 9 de En. de 2021
Respondida: Crish
el 14 de En. de 2021
h = [1 1 0 1 0 1 0 1];
bitrate = 1;
n = 1000;
T = length(h)/bitrate;
N = n*length(h);
dt = T/N;
t = 0:dt:T;
x = zeros(1,length(t));
lastbit = 1;
for i=1:length(h)
if h(i)==1
x((i-1)*n+1:i*n) = -lastbit;
lastbit = -lastbit;
else x((i-1)*n+1:i*n) = lastbit;
end
end
d=plot(t,x);grid on;
title('Line code POLAR NRZ-I');
set(d,'LineWidth',2.5);
axis([0 length(h) -1.5 1.5]);
counter = 0;
lastbit = 1;
for i = 1:length(t)
if t(i)>counter
counter = counter + 1;
if x(i)~=lastbit
result(counter) = 1;
lastbit = -lastbit;
else result(counter) = 0;
end
end
end
disp(result);
0 comentarios
Respuesta aceptada
Image Analyst
el 9 de En. de 2021
Editada: Image Analyst
el 9 de En. de 2021
To plot in different colors you have to specify a linespec in plot, like
d=plot(t,x, 'r-', 'LineWidth', 2); % Plot red line of width 2.
d=plot(t,x, 'b-', 'LineWidth', 3); % Plot blue line of width 3.
d=plot(t,x, '-', 'LineWidth', 2); % Plot line of width 2 in next default color;
Here's a full demo:
numLines = 10
lineColors = jet(numLines);
x = linspace(0, 2*pi, 1000);
period = pi;
legendStrings = cell(numLines, 1);
for k = 1 : numLines
y = sin(2*pi*x/(k * period));
plot(x, y, '-', 'Color', lineColors(k, :), 'LineWidth', 3);
hold on;
legendStrings{k} = sprintf('Curve #%d', k);
end
grid on;
xlabel('x', 'FontSize', 20);
ylabel('y', 'FontSize', 20);
legend(legendStrings, 'Location', 'southwest');
Also see attached m-file for a different demo.

4 comentarios
Image Analyst
el 9 de En. de 2021
Crish, here's another demo where I vary teh color with y value instead of x value:
clear all;
close all;
clc;
format long g;
format compact;
fontSize = 15;
fprintf('Beginning to run %s.m ...\n', mfilename);
x = linspace(0, 2*pi, 1000);
period = pi;
y = sin(2*pi*x/period);
numMarkers = numel(y);
markerColors = jet(numMarkers);
subplot(2, 1, 1);
for k = 1 : length(x)
plot(x(k), y(k), '.', 'Color', markerColors(k, :), 'MarkerSize', 30);
hold on;
end
grid on;
caption = sprintf('Line Color Varies Along X. Composed of %d Differently Colored Markers', numMarkers);
title(caption, 'FontSize', 20);
xlabel('x', 'FontSize', 20);
ylabel('y', 'FontSize', 20);
xlim([min(x), max(x)]);
% Maximize the figure window.
g = gcf;
g.WindowState = 'maximized';
% Do it again but instead of changing color as we move along the x axis,
% change it as we go along the y axis. So the marker color depends on the y value.
subplot(2, 1, 2);
numMarkers = numel(unique(y));
markerColors = jet(numMarkers);
miny = min(y);
maxy = max(y);
% Get indexes into the color map for each y value.
colorMapRows = round(rescale((y - miny) / (maxy - miny), 1, numMarkers));
for k = 1 : length(x)
thisMarkerColor = markerColors(colorMapRows(k), :);
plot(x(k), y(k), '.', 'Color', thisMarkerColor, 'MarkerSize', 30);
hold on;
end
grid on;
caption = sprintf('Line Color Varies With Y Value. Composed of %d Differently Colored Markers', numMarkers);
title(caption, 'FontSize', 20);
xlabel('x', 'FontSize', 20);
ylabel('y', 'FontSize', 20);
xlim([min(x), max(x)]);
fprintf('Done running %s.m.\n', mfilename);

I think you pretty much have all possibilities now.
Más respuestas (2)
Crish
el 13 de En. de 2021
1 comentario
Image Analyst
el 14 de En. de 2021
Editada: Image Analyst
el 14 de En. de 2021
Correct. You do not have any data points there. If you really need lines between the data points, you can go to some more trouble to get them by drawing a line from each point to the prior point but the line will be all one color, not have a color gradient. I'm pretty sure you're capable of that but if you're not, attach your data.
Ver también
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

