Thank you @technocrat and @dromano for your inspiration.
I have found another alternative example:
library(reshape2)
library(rvg)
library(officer)
#> Warning: package 'officer' was built under R version 3.6.3
library(ggmosaic)
#> Loading required package: ggplot2
library(ggrepel)
x <- matrix(c(212, 256, 144, 707), 2, 2)
dimnames(x) <- list(Measurement_1 = c("Time1_yes", "Time1_no"),
Measurement_2 = c("Time2_yes", "Time2_no"))
df <- reshape2::melt(x)
p <- ggplot(df) +
geom_mosaic(aes(weight = value,
x = product(Measurement_1, Measurement_2)),
fill = c("#6b5dd5", "grey80", "grey80", "#6b5dd5")) +
labs(x = "Measurement_2", y = "Measurement_1")
df2 <- ggplot_build(p)$data[[1]]
#> New names:
#> * `1` -> `1...1`
#> * `1.1` -> `1.1...2`
#> * `1` -> `1...3`
#> * `1.1` -> `1.1...4`
#> New names:
#> * `` -> ...1
#> * `` -> ...2
#> * `1...1` -> `1...3`
#> * `1.1...2` -> `1.1...4`
#> * `1...3` -> `1...5`
#> * ...
df2$pr <- round(100*df2$.wt/sum(df2$.wt), 2)
df2$lab <- paste0(df2$.wt, "; ", df2$pr, "%")
p + geom_label(data = df2,
aes(x = (xmin+xmax)/2, y = (ymin+ymax)/2, label = lab))
#> New names:
#> * `1` -> `1...1`
#> * `1.1` -> `1.1...2`
#> * `1` -> `1...3`
#> * `1.1` -> `1.1...4`
#> New names:
#> * `` -> ...1
#> * `` -> ...2
#> * `1...1` -> `1...3`
#> * `1.1...2` -> `1.1...4`
#> * `1...3` -> `1...5`
#> * ...

p + geom_label(
data = df2,
aes(x = (xmin + xmax) / 2, y = (ymin + ymax) / 2, label = lab)
) +
geom_label(
data = df2,
aes(x = (xmin + xmax) / 2, y = (ymin + ymax) / 2, label = label)
) +
geom_label_repel(aes(x = (df2$xmin + df2$xmax) / 2, y = (df2$ymin + df2$ymax) / 2, label = df2$lab),
nudge_x = 0.09,
direction = "y",
hjust = 0
)
#> New names:
#> * `1` -> `1...1`
#> * `1.1` -> `1.1...2`
#> * `1` -> `1...3`
#> * `1.1` -> `1.1...4`
#> New names:
#> * `` -> ...1
#> * `` -> ...2
#> * `1...1` -> `1...3`
#> * `1.1...2` -> `1.1...4`
#> * `1...3` -> `1...5`
#> * ...

### The above graph will be saved now as gg object:
gg <- p + geom_label(
data = df2,
aes(x = (xmin + xmax) / 2, y = (ymin + ymax) / 2, label = lab)
) +
geom_label(
data = df2,
aes(x = (xmin + xmax) / 2, y = (ymin + ymax) / 2, label = label)
) +
geom_label_repel(aes(x = (df2$xmin + df2$xmax) / 2, y = (df2$ymin + df2$ymax) / 2, label = df2$lab),
nudge_x = 0.09,
direction = "y",
hjust = 0
)
### and then I exported it to PowerPoint to do some "improvements":
read_pptx() %>%
add_slide(layout = "Title and Content", master = "Office Theme") %>%
ph_with(dml(ggobj = gg), location = ph_location_type(type = "body")) %>%
print(target = "assets_demo_rvg.pptx")
Created on 2020-03-08 by the reprex package (v0.3.0)
which gave me this:
that looks pretty similar to initial 2x2 table:
