Visualize (Visualize v0.2.35)

Copy Markdown View Source

Server-side SVG visualization library for Elixir.

Inspired by D3.js, designed for Phoenix LiveView.

Quick Start

# Create a simple line chart
data = [
  %{date: ~D[2024-01-01], value: 10},
  %{date: ~D[2024-01-02], value: 25},
  %{date: ~D[2024-01-03], value: 15}
]

# Create scales
x_scale = Visualize.Scale.time()
  |> Visualize.Scale.domain(Visualize.Data.extent(data, & &1.date))
  |> Visualize.Scale.range([0, 500])

y_scale = Visualize.Scale.linear()
  |> Visualize.Scale.domain([0, Visualize.Data.max(data, & &1.value)])
  |> Visualize.Scale.range([300, 0])
  |> Visualize.Scale.nice()

# Create line generator
line = Visualize.Shape.line()
  |> Visualize.Shape.x(fn d -> Visualize.Scale.apply(x_scale, d.date) end)
  |> Visualize.Shape.y(fn d -> Visualize.Scale.apply(y_scale, d.value) end)
  |> Visualize.Shape.curve(:monotone_x)

# Generate path
path_data = Visualize.Shape.generate(line, data)

Modules

LiveView Integration

All SVG elements implement Phoenix.HTML.Safe, so they can be used directly in HEEx templates:

def render(assigns) do
  ~H"""
  <svg width="600" height="400">
    <%= @chart_element %>
  </svg>
  """
end

Summary

Functions

arc()

See Visualize.Shape.arc/0.

area()

See Visualize.Shape.area/0.

band()

See Visualize.Scale.band/0.

line()

See Visualize.Shape.line/0.

linear()

See Visualize.Scale.linear/0.

ordinal()

See Visualize.Scale.ordinal/0.

pie()

See Visualize.Shape.pie/0.

render(element)

Renders an SVG element to a string.

svg(attrs \\ [])

Creates a new SVG element.

Examples

Visualize.svg(width: 600, height: 400)

symbol()

See Visualize.Shape.symbol/0.

time()

See Visualize.Scale.time/0.

version()

Returns the version of the library.