Data Visualization

Published

June 19, 2025

Under construction

General interpretation checklist

Study Design & Population

  • Is the study design informative (powered) enough for the intended analysis?
  • Is the study population relevant for the intended inference?

Data Selection & Management

  • Are all relevant data available for the analysis?
  • Are all data collected with the appropriate level of exactness and completeness?
  • Are the data in the model independent (low correlation)?
  • Are there available data that were not included in the analysis?
  • How were the parameters included?
    • Based on a full model approach (FFEM) or statistical significance (e.g., SCM)?
  • Are there parameters that were omitted from the analysis?
  • Are there parts of the analysis that are not shown? Why?
  • How were the values to visualize chosen?

Data Integrity & Bias

  • Are there potential biases introduced by non-random patient dropouts?
  • Will the model parameterization impact the interpretation?
  • Will the handling of missing data impact the interpretation?

Statistical Clarity & Rationale

  • How was the uncertainty assessed?
  • Is the width of the confidence interval clear?
  • How was the reference/baseline chosen and computed?
  • Is there an objective rationale for the width of the reference area?

Tables

https://clauswilke.com/dataviz/figure-titles-captions.html#tables

Figures

Ideally, each figure should answer only one question. You may have performed multiple independent experiments to answer one research question. The results of these independent experiments can be combined into a multi-panel figure, with one overarching declarative title.

data-to-viz.com dataviz-inspiration

Label line ends in time series with ggplot2

library(tidyverse)

d <- Orange %>% 
  as_tibble()

d_ends <- d %>% 
  group_by(Tree) %>% 
  top_n(1, age) %>% 
  pull(circumference)

d %>% 
  ggplot(aes(age, circumference, color = Tree)) +
    geom_line(size = 2, alpha = .8) +
    theme_minimal() +
    scale_x_continuous(expand = c(0, 0)) +
    scale_y_continuous(sec.axis = sec_axis(~., breaks = d_ends)) +
    ggtitle("Orange trees getting bigger with age",
            subtitle = "Based on the Orange data set in R") +
    labs(x = "Days old", y = "Circumference (mm)")

Scientific figures

biorender.com reactome.org/icon-lib bioicons.com healthicons.org scidraw.io undraw.co smart.servier.com

Writing Alt Text for Data Visualization

You probably can’t write text that conveys the entire meaning of a chart. But, that doesn’t mean that you shouldn’t try.

https://medium.com/nightingale/writing-alt-text-for-data-visualization-2a218ef43f81

https://medium.com/nightingale/writing-alt-text-for-data-visualization-2a218ef43f81

Footnotes

  1. https://drsimonj.svbtle.com/label-line-ends-in-time-series-with-ggplot2↩︎