MATLAB Answers


Plot bar chart with log scale on y axis

Asked by Henrik Hembrock on 16 Jul 2019
Latest activity Edited by the cyclist
on 16 Jul 2019
Hello there,
I want to plot a group bar chart with differences about 10^-4 within the data, positiv and negativ. So the problem is, either I get a bar chart where just the big values are visible and the small ones disappear, or there is some trouble about plotting negative/postitiv data on a log scale.
I tried to add
in my code, but it doesn't work as expected, and i dont know which other options i got.


on 16 Jul 2019
A logarithmic scale doesn't work well when you need to cross the 0. Can you give a small example of your data and the intended output?
It may be the best solution to stick two axes together, one with the positive data and one for the negative.
One of the matrizes:
data1=[-0.000737799000000000 0.0219366000000000 -3.30534000000000 -0.000590114000000000;
-0.00101848000000000 0.0209445000000000 -3.33881000000000 -0.000888108000000000;
-0.000395884000000000 0.0200179000000000 -3.24480000000000 -0.000270600000000000;
-0.00101200000000000 0.0194767000000000 -3.33831000000000 -0.000899477000000000]
An example of my intended output does not exist yet, at least i couldn't find any. But this produces my minimal current output:
axes1 = axes('Parent',fig);
bar1 = bar(data1,'Parent',axes1);
set(fig,'PaperSize',[18 13]);
%set(axes1,'YScale','log') ---> Ignores negative data
on 16 Jul 2019
Logarithmic scales don't play nice with mixing signs, so it is not entirely clear what you want as an end result. So can you try making an example in something like paint?

Sign in to comment.

1 Answer

Answer by the cyclist
on 16 Jul 2019
Edited by the cyclist
on 16 Jul 2019

There are some good thoughts on how to handle this problem in response to this question. In particular, the accepted answer by Matt Tearle seems very useful.
You'll need to adapt to bar chart, but the concept is the same.
Notice that they are doing the log transformation on the X axis, not the Y.


Sign in to comment.