# 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)Contour (XY)
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:
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
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
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.
