Contour (XY)

Authors

[Editor] Hu Zheng;

[Contributors]

Modified

2026-01-17

Note

Hiplot website

This page is the tutorial for source code version of the Hiplot Contour (XY) plugin. You can also use the Hiplot website to achieve no code ploting. For more information please see the following link:

https://hiplot.cn/basic/contour-xy?lang=en

Contour plot (XY) is a data processing method that reflects data density through contour line.

Setup

  • System Requirements: Cross-platform (Linux/MacOS/Windows)

  • Programming language: R

  • Dependent packages: data.table; jsonlite; ggplot2; ggisoband

# Install packages
if (!requireNamespace("data.table", quietly = TRUE)) {
  install.packages("data.table")
}
if (!requireNamespace("jsonlite", quietly = TRUE)) {
  install.packages("jsonlite")
}
if (!requireNamespace("ggplot2", quietly = TRUE)) {
  install.packages("ggplot2")
}
if (!requireNamespace("ggisoband", quietly = TRUE)) {
  remotes::install_github("clauswilke/ggisoband")
}

# Load packages
library(data.table)
library(jsonlite)
library(ggplot2)
library(ggisoband)
sessioninfo::session_info("attached")
─ Session info ───────────────────────────────────────────────────────────────
 setting  value
 version  R version 4.5.2 (2025-10-31)
 os       Ubuntu 24.04.3 LTS
 system   x86_64, linux-gnu
 ui       X11
 language (EN)
 collate  C.UTF-8
 ctype    C.UTF-8
 tz       UTC
 date     2026-01-17
 pandoc   3.1.3 @ /usr/bin/ (via rmarkdown)
 quarto   1.8.27 @ /usr/local/bin/quarto

─ Packages ───────────────────────────────────────────────────────────────────
 package    * version    date (UTC) lib source
 data.table * 1.18.0     2025-12-24 [1] RSPM
 ggisoband  * 0.0.0.9000 2025-11-02 [1] Github (clauswilke/ggisoband@eef779f)
 ggplot2    * 4.0.1      2025-11-14 [1] RSPM
 jsonlite   * 2.0.0      2025-03-27 [1] RSPM

 [1] /home/runner/work/_temp/Library
 [2] /opt/R/4.5.2/lib/R/site-library
 [3] /opt/R/4.5.2/lib/R/library
 * ── Packages attached to the search path.

──────────────────────────────────────────────────────────────────────────────

Data Preparation

The loaded data are two variables.

# Load data
data <- data.table::fread(jsonlite::read_json("https://hiplot.cn/ui/basic/contour-xy/data.json")$exampleData$textarea[[1]])
data <- as.data.frame(data)

# convert data structure
colnames(data) <- c("xvalue", "yvalue")

# View data
head(data)
  xvalue yvalue
1  2.620    110
2  2.875    110
3  2.320     93
4  3.215    110
5  3.440    175
6  3.460    105

Visualization

# Contour (XY)
p <- ggplot(data, aes(xvalue, yvalue)) +
  geom_density_bands(
    alpha = 1,
    aes(fill = stat(density)), color = "gray40", size = 0.2
    ) +
  geom_point(alpha = 1, shape = 21, fill = "white") +
  scale_fill_viridis_c(guide = "legend") +
  ylab("value2") +
  xlab("value1") +
  ggtitle("Contour-XY Plot") +
  theme_bw() +
  theme(text = element_text(family = "Arial"),
        plot.title = element_text(size = 12,hjust = 0.5),
        axis.title = element_text(size = 12),
        axis.text = element_text(size = 10),
        axis.text.x = element_text(angle = 0, hjust = 0.5,vjust = 1),
        legend.position = "right",
        legend.direction = "vertical",
        legend.title = element_text(size = 10),
        legend.text = element_text(size = 10))

p
FigureΒ 1: Contour (XY)

Just as contour lines in geography represent different heights, different contour lines in contour maps represent different densities. The closer to the center, the smaller contour loop is, and the higher the regional data density is. For example, the data density of yellow area is the highest, while that of blue area is the lowest.