second color of bar() always black?
1 回表示 (過去 30 日間)
古いコメントを表示
I am trying to plot two bar plots on the same graph.
When I do:
bar(aout1, a1, 'r'); hold on;
I see the red bars, as expected. However, then when I do:
bar(bout1, b1, 'g');
I see black bars drawn over the red bars.
If I change both "bar" commands to "plot", the colors are red and green, as expected.
Anyone know what could cause this?
Thanks,
David
0 件のコメント
回答 (2 件)
Image Analyst
2012 年 3 月 21 日
Here is a demo to set customized series colors for both line plots using plot() and bar charts using bar().
% In the help it says this:
%
% "plot automatically chooses colors and line styles in the order
% specified by ColorOrder and LineStyleOrder properties of current axes.
% ColorOrder : m-by-3 matrix of RGB values
%
% Colors to use for multiline plots. Defines the colors used
% by the plot and plot3 functions to color each line plotted.
% If you do not specify a line color with plot and plot3,
% these functions cycle through the ColorOrder property to
% obtain the color for each line plotted. To obtain the current ColorOrder,
% which might be set during startup, get the property value:
%
% get(gca,'ColorOrder')
%
% Note that if the axes NextPlot property is replace (the default),
% high-level functions like plot reset the ColorOrder property
% before determining the colors to use. If you want MATLAB to
% use a ColorOrder that is different from the default,
% set NextPlot to replacechildren. You can also specify your
% own default ColorOrder."
clc; % Clear the command window.
close all; % Close all figures (except those of imtool.)
clear; % Erase all existing variables.
workspace; % Make sure the workspace panel is showing.
originalColorOrder = get(gca,'ColorOrder') % Initial
% Change to new colors. You can get these via Photoshop if you want.
% Make sure you divide by 255 to get them in the range 0-1.
myColorOrder = [...
255 0 0;... % Red.
0 255 0;... % Green
0 0 255;... % Blue
0 255 255;... % Cyan
255 0 255;... % Magenta
255 255 0;... % Yellow
0 0 0;... % Black
255 128 0]/255 % Orange
% You can extend this by more rows if you want more colors.
numberOfColors = size(myColorOrder, 1)
set(gca, 'ColorOrder', myColorOrder, 'NextPlot', 'replacechildren');
% The things I put in the set() command are especially important.
newColorOrder = get(gca,'ColorOrder') % Verify it changed
% newColorOrder should be the same as myColorOrder
promptMessage = sprintf('Do you want a bar chart, line plot,\nor Cancel to quit?');
button = questdlg(promptMessage, 'Which type of chart', 'Line Plot', 'Bar Chart', 'Cancel');
if strcmp(button, 'Cancel')
return;
elseif strcmpi(button, 'Line Plot');
linePlot = true;
numberOfXSamples = 30; % Good values are 30 for plot and numberOfColors for bar.
else
linePlot = false;
numberOfXSamples = numberOfColors; % Good values are 30 for plot and numberOfColors for bar.
end
% Make up some random sample data:
x = 1:numberOfXSamples;
y = zeros(numberOfColors, numberOfXSamples);
for k = 1 : numberOfColors % 8 sets of data.
y(k,:) = k + rand(1, numberOfXSamples);
end
if linePlot
% Lineplot
% Now plot with changed colors.
plot(x,y, 'LineWidth', 3);
else
% Bar chart:
bar(x, y, 'BarWidth', 1);
colormap(myColorOrder);
end
grid on;
fontSize = 20;
title('Plot of 8 lines with custom ColorOrder', 'FontSize', fontSize);
xlabel('X Axis', 'FontSize', fontSize);
ylabel('Y Axis', 'FontSize', fontSize);
legend('Plot 1 = Red', 'Plot 2 = Green', 'Plot 3 = Blue', ...
'Plot 4 = Cyan', 'Plot 5 = Magenta', ...
'Plot 6 = Yellow', 'Plot 7 = Black', 'Plot 8 = Orange');
% Scale the y axis from 0 to 9:
ylim([0 ceil(max(y(:)))]);
% Enlarge figure to full screen.
set(gcf, 'units','normalized','outerposition',[0 0 1 1]); % Maximize figure.
set(gcf,'name','Demo by ImageAnalyst','numbertitle','off')
0 件のコメント
Geoff
2012 年 3 月 21 日
Organise your data series into columns in a matrix and do a single bar plot.
Assuming a1 and b1 are the same length, do this:
% If a1 and b1 are column-vectors:
bar( [a1 b1] );
% If a1 and b1 are row-vectors:
bar( [a1;b1]' );
If vectors are not the same length, pad them with NaN values
4 件のコメント
Image Analyst
2012 年 3 月 21 日
Sorry - it's ColorOrder for plot() but that didn't seem to work for bar(). I had to use colormap() for bar(). See my demo below.
参考
カテゴリ
Help Center および File Exchange で Data Distribution Plots についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!