# Getting started¶

Greedy or topological coloring (or sequential coloring) is a
cartographic method of assigning colors to polygons (or other
geoemtries, `greedy`

supports all geometry types) in such a way, that
no two adjacent polygons share the same color.

`greedy`

is a small package providing such a functionality on top of
GeoPandas GeoDataFrames. `greedy.greedy()`

is all we need.

```
import geopandas as gpd
from greedy import greedy
```

Few of `greedy`

‘s methods of coloring require either measuring of
areas or distances. To obtain proper values, our GeoDataFrame needs to
be in projected CRS. Let’s use Africa and reproject it to ’ESRI:102022’:

```
world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
africa = world.loc[world.continent == 'Africa']
africa = africa.to_crs('ESRI:102022')
ax = africa.plot(figsize=(12, 16))
ax.set_axis_off()
```

## Default¶

The default usage of `greedy`

is extremely simple. Greedy returns
Series with color codes, so we can assign it directly as a new column of
our GeoDataFrame:

```
africa['greedy_default'] = greedy(africa)
africa['greedy_default'].head(5)
```

```
1 1
2 0
11 0
12 1
13 4
Name: greedy_default, dtype: int64
```

Using resulting color codes as plotting categories gives us following plot:

```
ax = africa.plot('greedy_default', categorical=True, figsize=(12, 16), cmap='Set3', legend=True)
ax.set_axis_off()
```

## Strategies¶

### Balanced¶

Greedy offers several strategies of coloring. The default strategy is
`balanced`

based on `count`

attempting to balance the number of
features per each color. Other balanced modes are `area`

(balance the
area covered by each color), `distance`

and `centroid`

(both
attemtps to balance the distance between colors). Each of them attempts
to balance the color assignemnt according to different conditions and
hence can result in a differnet number of colors.

```
africa['greedy_area'] = greedy(africa, strategy='balanced', balance='area')
ax = africa.plot('greedy_area', categorical=True, figsize=(12, 16), cmap='Set3', legend=True)
ax.set_axis_off()
```

Different modes of balancing within `balanced`

strategy can be set
using `balance`

keyword.

```
africa['greedy_distance'] = greedy(africa, strategy='balanced', balance='distance')
ax = africa.plot('greedy_distance', categorical=True, figsize=(12, 16), cmap='Set3', legend=True)
ax.set_axis_off()
```

## NetworkX strategies¶

On top of four modes of balanced coloring strategy, `greedy`

offers
all `networkx.greedy_coloring()`

strategies, like `largest_first`

:

```
africa['greedy_largest_first'] = greedy(africa, strategy='largest_first')
```

```
ax = africa.plot('greedy_largest_first', categorical=True, figsize=(12, 16), cmap='Set3', legend=True)
ax.set_axis_off()
```

Another strategy provided by networkX is `smallest_last`

. All
strategies provide different results. Check Comparison of strategies for
details.

```
africa['greedy_s'] = greedy(africa, strategy='smallest_last')
```

```
ax = africa.plot('greedy_s', categorical=True, figsize=(12, 16), cmap='Set3', legend=True)
ax.set_axis_off()
```

Greedy is variable in a way how to define adjacency and which coloring strategy to use. All options are described in this documentation together with comparison of their performance.