The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]metanet.ch.

Gaia Star Catalog

Introduction

This vignette demonstrates visualizing astronomical data from the Gaia star catalog. The example showcases: - 5 million stars from the 1.8 billion element catalog - Raster density visualization revealing the Milky Way - Hertzsprung-Russell diagram (color vs. magnitude) - Crossfilter interactions between multiple views

Note: This example uses remote Parquet data (may take a few seconds to load).

Example: Gaia Star Catalog

library(rMosaic)
library(DBI)
library(duckdb)

# Build the spec
gaia_spec <- list(
  meta = list(
    title       = "Gaia Star Catalog",
    description = paste(
      "A 5M row sample of the 1.8B element Gaia star catalog.",
      "A `raster` sky map reveals our Milky Way galaxy.",
      "Select high parallax stars in the histogram to reveal a",
      "Hertzsprung-Russell diagram in the plot of stellar color vs. magnitude on the right.",
      "_You may need to wait a few seconds for the dataset to load._",
      sep = "\n\n"
    )
  ),
  data = list(
    gaia = paste(
      "-- compute u and v with natural earth projection",
      "WITH prep AS (",
      "  SELECT",
      "    radians((-l + 540) % 360 - 180) AS lambda,",
      "    radians(b) AS phi,",
      "    asin(sqrt(3)/2 * sin(phi)) AS t,",
      "    t^2 AS t2,",
      "    t2^3 AS t6,",
      "    *",
      "  FROM 'https://idl.uw.edu/mosaic-datasets/data/gaia-5m.parquet'",
      "  WHERE parallax BETWEEN -5 AND 20",
      "    AND phot_g_mean_mag IS NOT NULL",
      "    AND bp_rp IS NOT NULL",
      ")",
      "SELECT",
      "  (1.340264 * \"lambda\" * cos(t)) /",
      "    (sqrt(3)/2 * (1.340264",
      "      + (-0.081106 * 3 * t2)",
      "      + (t6 * (0.000893 * 7 + 0.003796 * 9 * t2)))) AS u,",
      "  t * (1.340264",
      "      + (-0.081106 * t2)",
      "      + (t6 * (0.000893 + 0.003796 * t2))) AS v,",
      "  * EXCLUDE('t','t2','t6')",
      "FROM prep",
      sep = "\n"
    )
  ),
  params = list(
    brush      = list(select = "crossfilter"),
    bandwidth  = 0,
    pixelSize  = 2,
    scaleType  = "sqrt"
  ),
  hconcat = list(
    list(
      vconcat = list(
        # Top: Sky map with Natural Earth projection
        list(
          plot = list(
            list(mark = "raster",
                 data = list(from = "gaia", filterBy = "$brush"),
                 x = "u", y = "v",
                 fill = "density",
                 bandwidth = "$bandwidth",
                 pixelSize = "$pixelSize"
            ),
            list(select = "intervalXY", pixelSize = 2, as = "$brush")
          ),
          xyDomain     = "Fixed",
          colorScale   = "$scaleType",
          colorScheme  = "viridis",
          width        = 440,
          height       = 250,
          marginLeft   = 25,
          marginTop    = 20,
          marginRight  = 1
        ),
        # Bottom row: magnitude and parallax histograms
        list(
          hconcat = list(
            # Magnitude histogram
            list(
              plot = list(
                list(mark = "rectY",
                     data = list(from = "gaia", filterBy = "$brush"),
                     x = list(bin = "phot_g_mean_mag"),
                     y = list(count = NULL),
                     fill  = "steelblue",
                     inset = 0.5
                ),
                list(select = "intervalX", as = "$brush")
              ),
              xDomain     = "Fixed",
              yScale      = "$scaleType",
              yGrid       = TRUE,
              width       = 220,
              height      = 120,
              marginLeft  = 65
            ),
            # Parallax histogram
            list(
              plot = list(
                list(mark = "rectY",
                     data = list(from = "gaia", filterBy = "$brush"),
                     x = list(bin = "parallax"),
                     y = list(count = NULL),
                     fill  = "steelblue",
                     inset = 0.5
                ),
                list(select = "intervalX", as = "$brush")
              ),
              xDomain     = "Fixed",
              yScale      = "$scaleType",
              yGrid       = TRUE,
              width       = 220,
              height      = 120,
              marginLeft  = 65
            )
          )
        )
      )
    ),
    list(hspace = 10),
    # Right: Hertzsprung-Russell diagram (color vs. magnitude)
    list(
      plot = list(
        list(mark = "raster",
             data = list(from = "gaia", filterBy = "$brush"),
             x = "bp_rp",
             y = "phot_g_mean_mag",
             fill = "density",
             bandwidth = "$bandwidth",
             pixelSize = "$pixelSize"
        ),
        list(select = "intervalXY", pixelSize = 2, as = "$brush")
      ),
      xyDomain     = "Fixed",
      colorScale   = "$scaleType",
      colorScheme  = "viridis",
      yReverse     = TRUE,
      width        = 230,
      height       = 370,
      marginLeft   = 25,
      marginTop    = 20,
      marginRight  = 1
    )
  )
)

# Launch the app
runMosaicApp(
  spec     = gaia_spec,
  specType = "yaml",
  data     = NULL,         # all data loaded via DuckDB + remote Parquet
  title    = "Gaia Star Catalog",
  backend = "wasm"
)

Key Features

Natural Earth Projection

Hertzsprung-Russell Diagram

Multiple Crossfilter Brushes

Performance

Try It Yourself

  1. Brush the parallax histogram to select nearby stars (parallax > 5)
  2. Notice the H-R diagram reveals clear stellar sequences
  3. Brush a region in the sky map to focus on a specific area
  4. Experiment with different parallax ranges to see distance effects

This demonstrates Mosaic’s ability to handle millions of rows with complex spatial transformations and coordinated interactions.

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.