Effacer les filtres
Effacer les filtres

Errorbar plot in colormap

20 vues (au cours des 30 derniers jours)
Sujeet Kumar Choudhary
Sujeet Kumar Choudhary le 20 Oct 2022
I could manage to make a colorbar plot using scatter, but I have to show the associated errorbar as well. To bare minimum, I first created errorbar plot and then scatter plot on the same figure with colormap. However, It would be great if the color of the errorbar matches the color of the symbol as per the colorbar values. Note that the colorscale is in the log value. My output figure is following and the data is attached as data_mat.mat file.
My code is following
figure();box on;hold on;
errorbar(data_mat(:,1),data_mat(:,3),data_mat(:,4),'.','MarkerSize',10,'LineWidth',1)
hold on;
scatter(data_mat(:,1),data_mat(:,3),140,data_mat(:,2),'fill');
hcb=colorbar;
colormap('parula');
hcb.Title.String = "title";
set(gca,'ColorScale','log');
set(gca,'FontSize',18);
hcb.FontSize=14;
xlabel('X','FontSize',20);ylabel('Y','FontSize',20);
set(gca, 'Linewidth', 1);

Réponse acceptée

Bjorn Gustavsson
Bjorn Gustavsson le 21 Oct 2022
Modifié(e) : Bjorn Gustavsson le 27 Oct 2022
You might get away with putting the errorbar-call in a loop. Perhaps something like this:
figure();
clf
box on
hold on
cmp = parula;
dx = 0.1*randn(size(data_mat(:,1)));
for i1 = size(data_mat,1):-1:1
phE(i1) = errorbar(data_mat(i1,1)+dx(i1),...
data_mat(i1,3),...
data_mat(i1,4),...
'.','MarkerSize',10,'LineWidth',1);
hold on
end
for i1 = size(data_mat,1):-1:1
% Set the colour of phE to a colour from a linear interpolation of the
% full parula colour-map between the max and min values of data_mat(:,4)
set(phE(i1),...
'color',interp1(1:size(cmp,1),...
cmp,...
1+(size(cmp,1)-1)*(log10(data_mat(i1,2))-min(log10(data_mat(:,2))))/(max(log10(data_mat(:,2))) - min(log10(data_mat(:,2))))))
end
hold on;
scatter(data_mat(:,1)+dx,data_mat(:,3),140,data_mat(:,2),'fill');
hcb=colorbar;
colormap('parula');
hcb.Title.String = "title";
set(gca,'ColorScale','log');
set(gca,'FontSize',18);
hcb.FontSize=14;
xlabel('X','FontSize',20);ylabel('Y','FontSize',20);
set(gca, 'Linewidth', 1);
HTH
  7 commentaires
Bjorn Gustavsson
Bjorn Gustavsson le 27 Oct 2022
Then just change the interpolation-scheme to logarithmic, as corrected above.
Sujeet Kumar Choudhary
Sujeet Kumar Choudhary le 27 Oct 2022
Modifié(e) : Sujeet Kumar Choudhary le 27 Oct 2022
@Bjorn Gustavsson Thank you so much! Perfect now. Here is the output figure with little tweaks (-changing the order of "scatter" and "errorbar" function, and making the errorbar symbol big enough to match the scatter symbol).

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Errorbars dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by