Re: Fw: BarChart inside a Frame. How to remove Labels from the top of the frame? How to put x-axis label below and not on the side?
- To: mathgroup at smc.vnet.net
- Subject: [mg80616] Re: Fw: [mg80589] BarChart inside a Frame. How to remove Labels from the top of the frame? How to put x-axis label below and not on the side?
- From: "Jean-Marc Gulliet" <jeanmarc.gulliet at gmail.com>
- Date: Sun, 26 Aug 2007 23:19:18 -0400 (EDT)
- References: <002f01c7e7f2$0bdca560$8fcc0544@computerh20djr>
[See my answer at the bottom of the post.] Nasser Abbasi wrote: > Thanks Jean for your reply. > > I got a similar reply from Bob Hanlon below, but this solution does not work > really for the reasons I explained below. I posted this back to the > newsgroup (but this takes too long to show) so I am sending you the message > below. > > thank again for your time. > > Nasser > > > ----- Original Message ----- > From: "Nasser Abbasi" <nma at 12000.org> > To: <mathgroup at smc.vnet.net> > Cc: <hanlonr at cox.net> > Sent: Sunday, August 26, 2007 5:01 AM > Subject: Re: [mg80589] BarChart inside a Frame. How to remove Labels from > the top of the frame? How to put x-axis label below and not on the side? > > > > > >> ---- Nasser Abbasi <nma at 12000.org> wrote: > >>> Mathematica 6.0.1 > >>> > >>> This is really annoying. I wanted a BarChart inside a frame. All works > >>> ok, > >>> except it insists on putting the bar labels on top of the frame as well > >>> as > >>> on the bottom of the frame, like this: > >>> > >>> BarChart[{1, 2, 3}, Frame -> True] > >>> > >>> I can remove the labels altogether, and use FrameTicks, but it still > >>> does it > >>> again ! > >>> > >>> BarChart[{1, 2, 3}, Frame -> > >>> True,BarLabels->None,FrameTicks->{{1,2,3},{0,1}}] > >>> > >>> I think BarChart conflict with Frame somehow. > >>> > >>> The only reason I wanted to put the BarChart inside a frame, is that > >>> with a > >>> frame, when I put the x-label, it will go below and not on the side. > >>> > >>> I wanted to write a large x-label, and just using BarChart, the x-label > >>> was > >>> extending too far to the right since it start at the right edge of the > >>> axis, > >>> as you see from this example > >>> > >>> BarChart[{1, 2, 3}, AxesLabel -> {"x-axis label"}] > >>> > >>> Is there a way to solve this problem? Either just use BarChart without > >>> Frame, but tell it to put the x-label BELOW, or use a Frame with > >>> BarChart > >>> but not have the bar labels at top and bottom as well? > >>> > > > > > >> Needs["BarCharts`"]; > >> > >> BarChart[{1, 2, 3}, > >> Frame -> True, FrameTicks -> {Range[3], Range[0, 3], None, None}, > >> FrameLabel -> (Style[#, FontSize -> 14] & /@ {"x-axis label", > >> "y-axis label"})] > >> > >> BarChart[{1, 2, 3}, > >> Frame -> {True, True, None, None}, > >> FrameTicks -> {Range[3], Range[0, 3], None, None}, > >> FrameLabel -> (Style[#, FontSize -> 14] & /@ {"x-axis label", > >> "y-axis label"})] > >> > >> > >> Bob Hanlon > >> > > > > Thanks Bob, > > > > You solution helps, but now I am unable now to use BarLabels ! > > > > I can't use FrameTicks in place of BarLabels, since FrameTicks do not get > > positioned at the same locations as BarLabels. Using Frame seems to > > prevent BarLabels from showing up: > > > > BarChart[{1, 2, 3}, Frame -> True, BarLabels -> {0, 1, 2}, > > FrameTicks -> {None, Range[0, 3], None, None}, > > FrameLabel -> (Style[#1, FontSize -> 14] & ) /@ {"x-axis label", "y-axis > > label"}] > > > > For example, If I replace frameTicks for the x-axis with what I wanted to > > be the BarLabels, I get this > > > > BarChart[{1, 2, 3}, Frame -> True, FrameTicks -> {{0, 1, 2}, Range[0, 3], > > None, None}, > > FrameLabel -> (Style[#1, FontSize -> 14] & ) /@ {"x-axis label", "y-axis > > label"}] > > > > and nothing I did would make FrameTicks {0,1,2} to be placed right where > > the earlier frameTicks {1,2,3} were. > > > > ofcourse I can use BarLabels without the FrameTicks, but then we are back > > to square one, the BarLabels would now show in the top and bottom: > > > > BarChart[{1, 2, 3}, Frame -> True, BarLabels -> {0, 1, 2}, > > FrameLabel -> (Style[#1, FontSize -> 14] & ) /@ {"x-axis label", "y-axis > > label"}] Hi Nasser, This time, I believe that the following expression yields the result that you are looking for. Needs["BarCharts`"]; BarChart[{1, 2, 3}, Frame -> {True, True, None, None}, FrameTicks -> {{{1, "0"}, {2, "1"}, {3, "2"}}, Range[0, 3], None, None}, FrameLabel -> (Style[#1, FontSize -> 14] & ) /@ {"x-axis label", "y-axis label"}] So we get a bar chart with the bar labeled 0, 1 , and 2 on the x-axis and below a centered label for the axis. The trick is to use the form {tick_position, tick_label} for each ticks on the x-axis For instance, {2,"1"} tells Mathematica to display one rather than two for the second tick. Regards, -- Jean-Marc