How tall and wide are paintings at the Museum of Modern Art?

Exploring the aspect ratios of paintings at the Museum of Modern Art
Author

Gabriel Zangirolani

Published

April 8, 2026

Introduction

We will be visualizing the aspect ratios of paintings in the Museum of Modern Art with the goal of understanding what visual dimensions are most pleasing to the human eye

Data preparation

We will be using a dataset provided by Steven Bedrick as part of my BMI 525 course.

It contains information about 2,253 paintings at the Musem of Modern Art.

Let’s load the data and required packages

library(readr)
library(here)
here() starts at C:/Users/gzang/Documents/website/rwebsite
library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.4     ✔ purrr     1.1.0
✔ forcats   1.0.1     ✔ stringr   1.5.2
✔ ggplot2   4.0.0     ✔ tibble    3.3.0
✔ lubridate 1.9.4     ✔ tidyr     1.3.1
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(dplyr)
library(readr)
library(ggthemes)
Warning: package 'ggthemes' was built under R version 4.5.3
moma <- read_csv(here("projects", "viz2-moma", "data", "artworks-cleaned.csv"))
Rows: 2253 Columns: 23
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr  (6): title, artist, artist_bio, artist_gender, classification, department
dbl (10): artist_birth_year, artist_death_year, num_artists, n_female_artist...
lgl  (7): circumference_cm, diameter_cm, length_cm, seat_height_cm, purchase...

ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.

Now let’s add information about the aspect rations of the paintings

moma_dim <- moma %>% 
  filter(height_cm < 600, width_cm < 760) %>% 
  mutate(hw_ratio = height_cm / width_cm,
         hw_cat = case_when(
           hw_ratio > 1 ~ "taller than wide",
           hw_ratio < 1 ~ "wider than tall",
           hw_ratio == 1 ~ "perfect square"
         ))

Plotting

Let’s plot the painting dimensions colored by aspect ratio

ggplot(moma_dim, aes(x = width_cm, y = height_cm, colour = hw_cat)) +
  geom_point(alpha = .5) +
  ggtitle("MoMA Paintings, Tall and Wide") +
  scale_colour_manual(name = "",
                      values = c("gray50", "#FF9900", "#B14CF0")) +
  theme_fivethirtyeight() +
  theme(axis.title = element_text()) +
  labs(x = "Width", y = "Height") 

As you can see, paintings that are much wider than they are tall are preferred to paintings that are much taller than they are wide. This makes sense when thinking about the aspect ratio of human vision.

Let’s have look at the distrivbutions using a violin plot

moma_dim_wide <- moma_dim %>% filter(hw_cat == "wider than tall") %>% 
  mutate(hw_ratio = width_cm/height_cm)

moma_dim_long <- moma_dim %>% filter(hw_cat == "taller than wide")

moma_dim_comp <- full_join(moma_dim_long, moma_dim_wide)
Joining with `by = join_by(title, artist, artist_bio, artist_birth_year,
artist_death_year, num_artists, n_female_artists, n_male_artists,
artist_gender, year_acquired, year_created, circumference_cm, depth_cm,
diameter_cm, height_cm, length_cm, width_cm, seat_height_cm, purchase, gift,
exchange, classification, department, hw_ratio, hw_cat)`
ggplot(moma_dim_comp, aes(x = hw_cat, y = hw_ratio, colour = hw_cat)) +
  geom_violin() +
  ylim(0.5, 2.5)
Warning: Removed 60 rows containing non-finite outside the scale range
(`stat_ydensity()`).

They look very similar, although it seems that for wider paintings there is a peak at twice as wide which doesn’t quite exist for the taller paintings. This suggests that twice as wide is a specifically aesthetically pleasing proportion that does not work in the same way for twice as tall.