A Hilbert curve (also known as a Hilbert space-filling curve) is a continuous fractal space-filling curve first described by the German mathematician David Hilbert in 1891, as a variant of the space-filling Peano curves discovered by Giuseppe Peano in 1890 (from Wikipedia).

This package provides an easy access to using Hilbert curves in
`ggplot2`

.

You can install the released version of gghilbertstrings from CRAN with:

`install.packages("gghilbertstrings")`

You can install the development version from GitHub with:

```
# install.packages("remotes") # run only if not installed
::install_github("Sumidu/gghilbertstrings") remotes
```

The `gghilbertstrings`

package comes with functions for
fast plotting of Hilbert curves in ggplot. At itâ€™s core is a fast RCpp
implementation that maps a 1D vector to a 2D position.

The `gghilbertplot`

function creates a Hilbert curve and
plots individual data points to the corners of this plot. It
automatically rescales the used `ID`

-variable to the full
range of the Hilbert curve. The method also automatically picks a
suitable level of detail able to represent all values of
`ID`

.

The following figure shows different hilbert curves for different
maximum `ID`

s.

The most simple way to plot data is to generate an `id`

column that ranges from 1 to n, where n is the largest value to use in
the Hilbert curve. Beware: The `id`

s are rounded to
integers.

```
library(gghilbertstrings)
# val is the ID column used here
<- tibble(val = 1:256,
df size = runif(256, 1, 5), # create random sizes
color = rep(c(1,2,3,4),64)) # create random colours
gghilbertplot(df, val,
color = factor(color), # render color as a factor
size = size,
add_curve = T) # also render the curves
```

We run the creation of a coordinate system 10 times. This means creating 1 entry for every possible corner in the Hilbert Curve.

```
library(microbenchmark)
library(HilbertCurve)
library(tidyverse)
library(gghilbertstrings)
<- list()
mb for (i in 1:10) {
<- tibble(val = 1:4^i,
df size = runif(4^i, 1, 5),
# create random sizes
color = rep(c(1, 2, 3, 4), 4^(i - 1)))
<- df$val
values <- microbenchmark(times = reps,
mb[[i]] HilbertCurve = {
<- HilbertCurve(1, 4^i, level = i, newpage = FALSE)
hc
},gghilbertstrings = {
<- hilbertd2xy(n = 4^i, values)
ggh
}) }
```

We use the
`eliasdabbas/search-engine-results-flights-tickets-keywords`

data set on Kaggle
as an example for a simple analysis. We map the full search URLs to the
Hilbert curve and then add points when the URL was present for a
specific search term. By comparing resulting facets we can see
systematic difference in which provides show up for which search
term.

Link: https://www.kaggle.com/eliasdabbas/search-engine-results-flights-tickets-keywords under License CC0