An open API service indexing awesome lists of open source software.

https://github.com/asjadnaqvi/stata-circlepack

A Stata package for circle packing
https://github.com/asjadnaqvi/stata-circlepack

ado circlepack circlepacking package stata

Last synced: 2 months ago
JSON representation

A Stata package for circle packing

Awesome Lists containing this project

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