Try Astrologer API

Subscribe to support and grow the project.

Modern Charts #

The modern concentric-ring layout is Kerykeion’s default chart style. It renders charts with graduated ruler scales, clean aspect lines with midpoint glyphs, and a distinct visual hierarchy.

All chart types and all three themes ("classic", "dark", "black-and-white", plus theme=None for no CSS at all) work with the modern style. The traditional wheel remains available via style="classic" — see the Charts documentation.

Modern Natal Chart #

Modern is the default: save_svg() and generate_svg_string() render it without any extra argument (passing style="modern" explicitly is equivalent).

from pathlib import Path
from kerykeion import AstrologicalSubjectFactory
from kerykeion.chart_data.factory import ChartDataFactory
from kerykeion.charts.drawer import ChartDrawer

subject = AstrologicalSubjectFactory.from_birth_data(
    "John Lennon", 1940, 10, 9, 18, 30,
    lng=-2.9833, lat=53.4, tz_str="Europe/London", online=False,
)

chart_data = ChartDataFactory.create_natal_chart_data(subject)
chart = ChartDrawer(chart_data=chart_data)

output_dir = Path("charts_output")
output_dir.mkdir(exist_ok=True)
chart.save_svg(output_path=output_dir, filename="lennon-modern-natal")

Modern Natal Chart

Modern Synastry Chart #

Dual-wheel modern charts show two subjects with distinct inner and outer planet rings.

from pathlib import Path
from kerykeion import AstrologicalSubjectFactory
from kerykeion.chart_data.factory import ChartDataFactory
from kerykeion.charts.drawer import ChartDrawer

john = AstrologicalSubjectFactory.from_birth_data(
    "John Lennon", 1940, 10, 9, 18, 30,
    lng=-2.9833, lat=53.4, tz_str="Europe/London", online=False,
)
yoko = AstrologicalSubjectFactory.from_birth_data(
    "Yoko Ono", 1933, 2, 18, 20, 30,
    lng=139.6917, lat=35.6895, tz_str="Asia/Tokyo", online=False,
)

chart_data = ChartDataFactory.create_synastry_chart_data(john, yoko)
chart = ChartDrawer(chart_data=chart_data)

output_dir = Path("charts_output")
output_dir.mkdir(exist_ok=True)
chart.save_svg(output_path=output_dir, filename="lennon-ono-modern-synastry")

Modern Synastry Chart

Modern Transit Chart #

from pathlib import Path
from kerykeion import AstrologicalSubjectFactory
from kerykeion.chart_data.factory import ChartDataFactory
from kerykeion.charts.drawer import ChartDrawer

subject = AstrologicalSubjectFactory.from_birth_data(
    "John Lennon", 1940, 10, 9, 18, 30,
    lng=-2.9833, lat=53.4, tz_str="Europe/London", online=False,
)

transit = AstrologicalSubjectFactory.from_birth_data(
    "Transit", 2025, 3, 4, 12, 0,
    lng=-2.9833, lat=53.4, tz_str="Europe/London", online=False,
)

chart_data = ChartDataFactory.create_transit_chart_data(subject, transit)
chart = ChartDrawer(chart_data=chart_data)

output_dir = Path("charts_output")
output_dir.mkdir(exist_ok=True)
chart.save_svg(output_path=output_dir, filename="lennon-modern-transit")

Modern Transit Chart

Modern Wheel Only #

The wheel-only output (without aspect grid) also supports the modern style:

from pathlib import Path
from kerykeion import AstrologicalSubjectFactory
from kerykeion.chart_data.factory import ChartDataFactory
from kerykeion.charts.drawer import ChartDrawer

subject = AstrologicalSubjectFactory.from_birth_data(
    "John Lennon", 1940, 10, 9, 18, 30,
    lng=-2.9833, lat=53.4, tz_str="Europe/London", online=False,
)

chart_data = ChartDataFactory.create_natal_chart_data(subject)
chart = ChartDrawer(chart_data=chart_data, theme="dark")

output_dir = Path("charts_output")
output_dir.mkdir(exist_ok=True)
chart.save_wheel_only_svg_file(
    output_path=output_dir,
    filename="lennon-modern-wheel-dark",
)

Modern Wheel Only

Modern-Only Parameters #

These keyword arguments are specific to the modern style and are ignored when style="classic":

Parameter Type Default Description
show_zodiac_background_ring bool True Draw colored zodiac wedges behind the outer planet ring
glyph_size "small" | "medium" | "large" "medium" Planet-cluster size on the wheel — see Glyph Sizes

Both can be set once on the constructor as a per-instance default, or per call on any render method.

Example disabling the zodiac background:

chart.save_svg(
    output_path=output_dir,
    filename="modern-no-zodiac-bg",
    show_zodiac_background_ring=False,
)

Classic vs Modern Comparison #

Both styles share the same underlying ChartDataFactory data. Only the rendering differs:

Feature Classic Modern
Layout Traditional wheel with sectors Concentric rings
Aspect display Grid/list panel Lines with midpoint glyphs in the core ring
Degree indicators Ticks around the wheel Graduated ruler ring (1°/5°/10° ticks)
Dual chart layout Inner/outer wheel Flat dual-ring with shared ruler
All themes supported Yes Yes
All chart types supported Yes Yes