asjadnaqvi / stata-alluvial

A Stata package for alluvial plots
MIT License
7 stars 3 forks source link
ado alluvial package stata

StataMin issues license Stars version release

Installation | Syntax | Examples | Feedback | Change log


alluvial-1

alluvial v1.4

(26 Sep 2024)

Installation

The package can be installed via SSC or GitHub. The GitHub version, might be more recent due to bug fixes, feature updates etc, and may contain syntax improvements and changes in default values. See version numbers below. Eventually the GitHub version is published on SSC.

SSC (v1.3):

ssc install alluvial, replace

GitHub (v1.4):

net install alluvial, from("https://raw.githubusercontent.com/asjadnaqvi/stata-alluvial/main/installation/") replace

The palettes package is required to run this command:

ssc install palettes, replace
ssc install colrspace, replace

Even if you have these packages installed, please check for updates: ado update, update.

If you want to make a clean figure, then it is advisable to load a clean scheme. These are several available and I personally use the following:

ssc install schemepack, replace
set scheme white_tableau  

You can also push the scheme directly into the graph using the scheme(schemename) option. See the help file for details or the example below.

I also prefer narrow fonts in figures with long labels. You can change this as follows:

graph set window fontface "Arial Narrow"

Syntax

The syntax for the latest version is as follows:

alluvial varlist [if] [in] [weight], 
                [ palette(str) colorby(layer|level) smooth(1-8) gap(num) recenter(mid|bot|top) shares percent
                  labangle(str) labsize(str) labposition(str) labcolor(str) labgap(str) 
                  catangle(str) catsize(str) catposition(str) catcolor(str) catgap(str) 
                  valsize(str) valcondition(num) valformat(str) valgap(str) novalues showtotal novalleft novalright 
                  lwidth(str) lcolor(str) alpha(num) offset(num) boxwidth(str)
                  wraplabel(num) wrapcat(num) valprop labprop valscale(num) labscale(num) n(num) * ]

See the help file help alluvial for details.

The most basic use is as follows:

alluvial varlist

where varlist are categorival variables given at the unit of observation. If any variable has more than 10 categories, or it is continuous, the command will throw an error. This is to avoid over-crowding the figure. For suggestions on how to automate this, please open an issue!

Examples

Load a Stata dataset:

sysuse nlsw88.dta, clear

Let's test the alluvial command:

alluvial race married collgrad smsa union

Smooth

alluvial race married collgrad smsa union, smooth(1)
alluvial race married collgrad smsa union, smooth(8)

colors

alluvial race married collgrad smsa union, colorby(layer)
alluvial race married collgrad smsa union, palette(carto)
alluvial race married collgrad smsa union, palette(CET I2)

showmiss + shares

alluvial race married collgrad smsa union, shares
alluvial race married collgrad smsa union, showmiss shares
alluvial race married collgrad smsa union, showmiss shares colorby(layer)

gap

alluvial race married collgrad smsa union, gap(0)
alluvial race married collgrad smsa union, gap(10)

all together

local vars race married collgrad smsa union

alluvial `vars',  smooth(8) alpha(60) palette(CET C7) gap(10) valcond(100) valsize(2) showtot ///
    xsize(2) ysize(1) lc(black) lw(0.1) 

Offset and label rotation (v1.1)

local vars race married collgrad smsa union
alluvial `vars',  smooth(8) alpha(60) palette(CET C7) gap(10) valcond(100) valsize(2) showtot ///
    xsize(2) ysize(1) lc(black) lw(0.1) ///
    laba(0) labpos(3) noval offset(6)

Box width (v1.2)

local vars race married collgrad smsa union
alluvial `vars',  smooth(8) alpha(60) palette(CET C7) gap(10) valcond(100) valsize(2) showtot ///
    xsize(2) ysize(1) lc(black) lw(0.1) ///
    laba(0) labpos(3) noval offset(6) boxwid(6)

v1.4 features

alluvial  race married collgrad smsa union,  smooth(8) alpha(60) palette(CET C6) valsize(2)  ///
    lw(0.1) lc(black)  ///
    laba(0) gap(2) novalright showtotal  ///
    xsize(2) ysize(1) 
alluvial  race married collgrad smsa union,  smooth(8) alpha(60) palette(CET C6) valsize(2)  ///
    lw(0.1) lc(black)  ///
    laba(0) labs(1.6) boxw(10) gap(2) novalues ///
    showtotal wrapcat(20) wraplab(15) catgap(8) plotregion(margin(b+5 l+10 r+10)) ///
    xsize(2) ysize(1)   
alluvial  race married collgrad smsa union,  smooth(8) alpha(60) palette(CET C6) valsize(2)  ///
    laba(0) labs(1.6) boxw(11) gap(2) novalues ///
    showtotal  wraplab(15) catgap(8) plotregion(margin(b+5 l+10 r+10)) ///
    xsize(2) ysize(1) labprop showmiss
alluvial race married collgrad smsa union, smooth(8) alpha(60) palette(CET C6) valsize(2)  ///
    laba(0) labs(1.6) boxw(11) gap(2) novalues ///
    showtotal wrapcat(20) wraplab(15) catgap(8) plotregion(margin(b+5 l+10 r+10)) ///
    xsize(2) ysize(1) labprop showmiss percent  
alluvial race married collgrad smsa union [w = wage], smooth(8) alpha(60) palette(CET C6) valsize(2)  ///
    laba(0) labs(1.6) boxw(11) gap(2) novalues ///
    showtotal wrapcat(20) wraplab(15) catgap(8) plotregion(margin(b+5 l+10 r+10)) ///
    xsize(2) ysize(1) showmiss labprop percent  

Feedback

Please open an issue to report errors, feature enhancements, and/or other requests.

Change log

v1.4 (26 Sep 2024)

v1.3 (10 Feb 2024)

v1.21 (19 Oct 2023)

v1.2 (04 Apr 2023)

v1.1 (15 Jan 2023)

v1.0 (08 Dec 2022)