A possible solution is to map your "satisfaction" data onto a colormap, then assign a color to each bar in your chart based on that colormap:
To do so, first set the "FaceColor" of the bars to "flat":
>> ax = axes;
>> b = barh(ax,0,duration,'stacked','FaceColor','flat');
Then, change the axes color limits to match those of your "satisfaction" data:
>> ax.CLim = [min(satisfaction) max(satisfaction)];
To label the colorbar and the x-axis of the plot, we write:
>> c = colorbar;
>> c.Label.String = 'Satisfaction';
>> xlabel('Duration');
Once the colormap is setup, you can assign each bar's "CData" to the corresponding "satisfaction" value:
for i = 1:length(duration)
b(i).CData = satisfaction(i);
end
This will produce the color mapping you expect. You can also change the scale of the colormap from linear to logarithmic by using the "ColorScale" property on the axes:
For example,
>> ax.ColorScale = "log";
I have attached a file to this post, combining all the steps described above into a single script.
Best Answer