The unicorn bubble - Donuts or Waffles ?

By | December 8, 2019

How Silicon Valley feels right now ?

Few days ago the Wall Street Journal (@WSGGraphics) published a tweet about Unicorns loosing value between their last private-market valuation and their IPO price.

In this post, we will replicate their visuals and we will demonstrate the problem of using donuts like charts. We will propose an alternative using waffle charts.

They illustrated the analysis with some circular charts. The problem with such visuals is that human eye is very bad ad comparing surfaces when they are represented by disks.

WSJ objective was to present a comparison of these companies valuation, In addition, WSJ wanted to illustrate the loss of value during IPO using two colors. If we look at the comparison between Wework and Juul Labs, this is striking. The two half disks looks very similar in term of diameters, but there is a 24% gap ! WeWork valuation is 47 Billions USD vs. Juul Labs’ is 38 billions USD,

In addition, the loss of value of Juul Labs looks relatively small as the gap between the inner disk and the outside radius is close but in reality, this company lost 37% !

Let’s replicate WSJ visuals

As a first step, we will reproduce the WSJ plots using the R package ggforce. This package is adding interesting functionality to ggplot2, in particular the possibility to draw circles. The half disc surface represent the company valuation, the larger as before IPO and the smaller in grey, after IPO.

The formula to compute the radius of each circle can be deduced from the surface of the half disk.

\[ S = \frac{\pi . r² }{2} \]

Which makes :

\[r = \sqrt{\frac{2.S}{\pi}} \]


# color 
wjs <- c("#ad3976", "#eeeff1")

# defintion of data
unicorns <- data.frame(
    start = rep(-pi/2,4)
    , end = rep(pi/2,4)
    , valuation = c(47, 8, 38, 24)
    , type = c("IPO","Private","IPO","Private")
    , unicorn = factor(
        c("WeWork","WeWork", "Juul Labs", "Juul Labs")
        , levels = c("WeWork", "Juul Labs")

loss <- data.frame(
    x = c(0,0)
    , y = c(-0.3,-0.3)
    , loss = c("-$39 B","-$14 B")
    , unicorn = c("WeWork", "Juul Labs")

# Behold the arcs
ggplot(unicorns) +
            x0 = 0, y0 = 0, r0 = 0, r = sqrt(valuation/pi*2),
            start = start, end = end, fill = type), col = "#eeeff1"
    ) + 
    coord_fixed() +
    geom_text(data = loss, aes(x = x,y = y,label = loss), col = wjs[1], fontface = "bold") +
    theme_void() +
    scale_fill_manual(values = wjs) +
    scale_color_manual(values = wjs) +
    facet_wrap(facets = . ~ unicorn) + theme( legend.position = "none")

It’s a nice visual, we can see clearly the huge drop of value of the failed WeWork IPO. However it’s very difficult to compare the pre-IPO value of Juul Labs with the one of WeWork if we don’t add the legend (as WSJ did it). We proposes bellow an alternative based on waffle charts where one square represents 1 billion USD. It makes the comparison between the two companies easier, as well as the drop of value from Juul Labs more visible.

ww <- c(`IPO Value`=(8), `Loss from
private valuation`=39)
jl <- c(`IPO Value`=(24), `Loss from
private valuation`=14)
    waffle(ww, rows=3, size=1, colors=c(wjs[2], wjs[1]), 
           xlab="1 b$ per square",
           pad = 1),
    waffle(jl, rows=3, size=1, colors=c(wjs[2], wjs[1]), 
           title="Juul Labs", 
           xlab="1 b$ per square",
           pad = 4)


Are you Donuts of Waffles ?