[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

st: RE: AW: RE: re: Possible to have different colours for by() groups in histogram?

From   "Nick Cox" <>
To   <>
Subject   st: RE: AW: RE: re: Possible to have different colours for by() groups in histogram?
Date   Wed, 4 Nov 2009 13:26:50 -0000

I am familiar with -separate-, as should be clear from the manual entry,
but I don't see any gain from using -separate- in this example. 

I was using -separate- for a similar graphical problem of my own with
two groups only yesterday, but then belatedly realised that using (the
equivalent of) -if group==1- and -if group==2- gave the separation
required without the artifice of two separate variables. One can be
over-fond of particular tricks, not that it matters much if the problem
is solved. 

The real advantage of -separate- is when you can plot two or more
variables with a single call. Thus with

sysuse auto 
separate mpg, by(foreign) veryshortlabel 

scatter mpg? weight, ms(oh x) 

there is a bigger advantage, especially if the variables created are
going to be useful for another purpose. 

However, there is evidence that even many experienced Stata users are
not aware of -separate-, so on that ground publicity is welcome. 


Martin Weiss

Thanks for the flowers! How about the -separate- trick, then? (Fishing
compliments, I know...)

Nick Cox

Thanks for this. The trick Martin used in his replies to your original
of putting frequently used options in a local macro deserves emphasis.
With not 2 but 3, 4, ... groups it becomes especially valuable. 

local opts discrete freq gap(5) xla(1/5) 

twoway histogram ease if group==1, color(red) `opts'  
|| histogram ease if group==2, color(blue) `opts' by(group, legend(off))


Philip Jones

Many thanks for the help Nick! That works perfectly. 

For others who may be searching about this question, it seems like you  
only need to include by(group) once in the command (with or without  
turning off the legend). Just a small point I found out running the  
command both ways.

>> . twoway histogram ease if group==1, color(red) gap(5) discrete freq
>> by(group) ///
>> || histogram ease if group == 2, color(blue) by(group, legend(off))
>> discrete freq xla(1/5)  gap(5)

Philip Jones

> I would like to know if it is possible in Stata to have different
> colours for plots in histograms created using the by() option. For
> instance, if I would like to plot frequencies of a Likert scale about
> the ease of a process (from 1 to 5) in two separate groups, I can
> generate a nice histogram using the by() option, but both "sides" (or
> plots) of the graph are the same colour.
> For instance,
> input group ease
> 1 1
> 1 2
> 1 3
> 1 3
> 1 3
> 1 3
> 1 4
> 1 5
> 1 5
> 2 2
> 2 2
> 2 2
> 2 3
> 2 3
> 2 4
> 2 4
> 2 5
> 2 5
> end
> graph twoway histogram ease, by(group) discrete frequency xtick(1(1)5)
> xlabel(1(1)5) gap(5) color(red)
> This gives me a histogram, but I would like a different colour for  
> each
> plot - say red for the plot on the left and blue for the one on the
> right.
> I am sure there is a trivial way of achieving this, but I haven't been
> able to find it. The barlook_options are not valid for histograms, and
> using the graph editor to alter the colour also results in both plots
> becoming the same colour.

*   For searches and help try:

© Copyright 1996–2017 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   What's new   |   Site index