You can reproduce this plot using ComplexUpset 1.3 or newer.
Prepare the dataset:
movies = ggplot2movies::movies
movies[movies$mpaa == '', 'mpaa'] = NA
movies = movies[complete.cases(movies), ]
And plot:
upset(
movies,
c('Action', 'Comedy', 'Drama'),
queries=list(
upset_query(set='Action', fill='orange'),
upset_query(set='Comedy', fill='blue'),
upset_query(set='Drama', fill='coral3')
),
base_annotations=list(
'Intersection size'=(
intersection_size(
bar_number_threshold=1, # show all numbers on top of bars
width=0.5, # reduce width of the bars
)
# add some space on the top of the bars
+ scale_y_continuous(expand=expansion(mult=c(0, 0.05)))
+ theme(
# hide grid lines
panel.grid.major=element_blank(),
panel.grid.minor=element_blank(),
# show axis lines
axis.line=element_line(colour='black')
)
)
),
stripes=upset_stripes(
geom=geom_segment(size=12), # make the stripes larger
colors=c('grey95', 'white')
),
# to prevent connectors from getting the colorured
# use `fill` instead of `color`, together with `shape='circle filled'`
matrix=intersection_matrix(
geom=geom_point(
shape='circle filled',
size=3.5,
stroke=0.45
)
),
set_sizes=(
upset_set_size(geom=geom_bar(width=0.4))
+ theme(
axis.line.x=element_line(colour='black'),
axis.ticks.x=element_line()
)
),
sort_sets='ascending',
sort_intersections='ascending'
)
