# stata-circlepack **Repository Path**: tidyfriday/stata-circlepack ## Basic Information - **Project Name**: stata-circlepack - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-16 - **Last Updated**: 2025-09-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ![StataMin](https://img.shields.io/badge/stata-2015-blue) ![issues](https://img.shields.io/github/issues/asjadnaqvi/stata-circlepack) ![license](https://img.shields.io/github/license/asjadnaqvi/stata-circlepack) ![Stars](https://img.shields.io/github/stars/asjadnaqvi/stata-circlepack) ![version](https://img.shields.io/github/v/release/asjadnaqvi/stata-circlepack) ![release](https://img.shields.io/github/release-date/asjadnaqvi/stata-circlepack) [Installation](#Installation) | [Syntax](#Syntax) | [Examples](#Examples) | [Feedback](#Feedback) | [Change log](#Change-log) --- ![circlepack-1](https://github.com/asjadnaqvi/stata-circlepack/assets/38498046/1d215337-0bf6-4b8f-9d00-f338267e631c) # circlepack v1.2 (15 Jan 2024) A Stata package for circle packing. It is based on D3's [packEnclose](https://observablehq.com/@d3/d3-packenclose) and Python's [circlify](https://github.com/elmotec/circlify) algorithms. ## 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. The SSC version (**v1.2**): ``` ssc install circlepack, replace ``` Or it can be installed from GitHub (**v1.2**): ``` net install circlepack, from("https://raw.githubusercontent.com/asjadnaqvi/stata-circlepack/main/installation/") replace ``` The `palettes` package is required to run this command: ``` ssc install palettes, replace ssc install colrspace, replace ``` Even if you have the package installed, make sure that it is updated `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: ``` circlepack numvar [if] [in], by(variables (min=1, max=3)) [ pad(num) points(num) angle(num) circle0 circle0c(str) format(str) palette(string) share labprop titleprop labscale(num) threshold(num) fi(list) addtitles novalues nolabels labsize(num) title(str) subtitle(str) note(str) scheme(str) name(str) ] ``` See the help file `help circlepack` for details. The most basic use is as follows: ``` circlepack numvar, over(variable(s)) ``` where `numvar` is a numeric variable, and `over()` are upto three variables, defined from more aggregate to finer levels. ## Examples Set up the data: ``` clear set scheme white_tableau graph set window fontface "Arial Narrow" use "https://github.com/asjadnaqvi/stata-circlepack/blob/main/data/demo_r_pjangrp3_clean.dta?raw=true", clear ``` ``` circlepack pop, by(NUTS0) format(%15.0fc) title("Population of European countries") ``` ``` circlepack pop, by(NUTS0) title("Population of European countries") noval ``` ``` circlepack pop, by(NUTS0) title("Population of European countries") circle0 noval ``` ``` circlepack pop, by(NUTS0 NUTS1) format(%15.0fc) noval circle0 ``` ``` circlepack pop, by(NUTS0 NUTS1) format(%15.0fc) noval addtitles ``` ``` circlepack pop, by(NUTS0 NUTS1 NUTS2) format(%15.0fc) nolab pad(0.06) ``` ``` circlepack pop if NUTS0=="AT", by(NUTS1 NUTS2 NUTS3) /// addtitles noval format(%15.0fc) circle0 /// title("Population of Austria at NUTS2 and NUTS3 level") ``` ``` circlepack pop if NUTS0=="NL", by(NUTS2 NUTS3) addtitles /// format(%15.0fc) title("Population of Netherlands at NUTS2 and NUTS3 level") ``` ``` circlepack pop if NUTS0=="NL", by(NUTS1 NUTS2 NUTS3) /// addtitles noval format(%15.0fc) title("Population of Netherlands at NUTS1-NUTS3 level") /// palette(CET L10) ``` ``` circlepack pop if NUTS0=="NL", by(NUTS1 NUTS2 NUTS3) /// addtitles noval format(%15.0fc) title("Population of Netherlands at NUTS1-NUTS3 level") /// palette(CET L10) points(6) pad(0.3) ``` ``` circlepack pop if NUTS0=="PT", by(NUTS2 NUTS3) /// addtitles noval format(%15.0fc) title("Population of Portugal at NUTS1-NUTS3 level") /// palette(CET C6) points(12) pad(0.1) ``` ### v1.1 updates ``` circlepack pop if NUTS0=="ES", by(NUTS1 NUTS3) addtitle ``` ``` circlepack pop if NUTS0=="ES", by(NUTS1 NUTS3) addtitle labprop titleprop ``` ``` circlepack pop if NUTS0=="ES", by(NUTS1 NUTS3) addtitle labprop titleprop labs(1.5 2.5) ``` ``` circlepack pop if NUTS0=="ES", by(NUTS1 NUTS3) addtitle labprop titleprop threshold(1000000) ``` ``` circlepack pop if NUTS0=="ES", by(NUTS1 NUTS3) addtitle labprop titleprop labcond(1000000) ``` ``` circlepack pop if NUTS0=="ES", by(NUTS1 NUTS2 NUTS3) addtitle labprop titleprop labcond(1000000) ``` ``` circlepack pop if NUTS0=="ES", by(NUTS1 NUTS2 NUTS3) nolab fi(10 40 80) ``` ``` circlepack pop if NUTS0=="ES", by(NUTS1 NUTS2 NUTS3) nolab fi(40 60 100) ``` ``` circlepack pop if NUTS0=="ES", by(NUTS1 NUTS3) addtitle labprop titleprop threshold(1000000) share ``` ## Feedback Please open an [issue](https://github.com/asjadnaqvi/stata-circlepack/issues) to report errors, feature enhancements, and/or other requests. ## Change log **v1.2 (15 Jan 2024)** - Fixed several local bugs. - Code clean ups. **v1.1 (16 May 2023)** - Major update with several new options added to align it with the `treemap` package. - `labprop`, `titleprop`, `labscale()`, `threshold()`, `fi()`, `share` options added. - Minor fixes to the code. **v1.01 (24 Nov 2022)** - Sorting stabilized to prevent random circlemap layouts. - Negative and zero values are automatically dropped. - Improved precision of variables. - Minor fixes in the code. **v1.0 (08 Sep 2022)** - First release