jointview
Compare two price or NAV series of a Polars DataFrame, side by side.
Run it
uvx jointview
That is the whole installation. uvx fetches the package and its dependencies for the
length of the run and leaves nothing behind.
uvx jointview navs.parquet # your own data
uvx jointview navs.parquet --height 900 # taller plot for a taller screen
Pick a series on each side. Both are drawn on one pair of axes, and each summary table describes exactly the rows in the plot — the common sample, where both series are present.
Why both lines share an axis
A second scale would invent a relationship that is not in the data. So both series are indexed to 100 at their first shared date, which is how a fund priced at 49 and one priced at 1,450 become comparable. The switch above the plot turns that off when the levels already share a scale.
Options
jointview |
the generated demo frame |
jointview <file> |
.parquet, .csv, .tsv, .json, .ndjson, .arrow, .ipc, .feather |
--height |
plot height in pixels (default 700) |
--edit |
open the notebook itself, from a clone |
-- … |
everything after a bare -- goes to marimo: -- --port 8080 --headless |
The first temporal column becomes the x-axis; without one the rows are numbered. Every numeric column is offered as a series.
The pieces on their own
Neither the chart nor the statistics need marimo. uvx runs the app; to import the
pieces, install the package from PyPI:
uv add jointview # or: pip install jointview
Statistics come from jQuantStats, so the
frame carries its period column into summary — the annualisation factor is read from
the spacing of the observations rather than assumed.
from jointview import demo_frame, line_chart, metrics, summary
frame = demo_frame()
table = summary(frame, "balanced", date_col="date") # a formatted two-column frame
sharpe = metrics(frame, "tech_fund", date_col="date")["Sharpe ratio"] # the raw number
chart = line_chart(frame, "balanced", "tech_fund") # a plain Altair chart
print(table.columns, table.height, dict(table.iter_rows())["Max drawdown"])
print(f"{sharpe:.2f}")
print(type(chart).__name__)
['metric', 'value'] 17 -15.90%
0.52
LayerChart
One line per claim above, in the same order — the table is two columns of formatted strings, the metric is a bare float, and the chart is Altair's own type rather than a marimo widget. The block is executed on every commit and its output compared against the result printed here, so a figure that drifts is a failing test rather than a stale README.
Seventeen figures per series — returns, volatility, Sharpe, Sortino, Calmar, drawdown,
Ulcer index, value at risk, and the shape of the period returns. A figure that cannot be
formed shows as — rather than blanking the table.
Metadata
Release files for jointview 0.3.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| jointview-0.3.3.tar.gz | 25.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| jointview-0.3.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 54.1 kB
Release files / jointview-0.3.3.tar.gz
| Download URL | jointview-0.3.3.tar.gz |
|---|---|
| Size | 25.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e6d9d52d6f8ebddb80b1018fb1f738a8ef278ecc16a2845648cad45b5492e1c1
|
|
BLAKE2b-256 checksum How to use checksums |
c6de8931496e86bd41ea457c4135e56a479d7e30133da071c5993eb12741f9e9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 18, 2026.
Transparency logRelease files / jointview-0.3.3-py3-none-any.whl
| Download URL | jointview-0.3.3-py3-none-any.whl |
|---|---|
| Size | 29.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ef4fcc218c5c7645e9bfb33a274f499f0287454880d0bbb9873f83695a45d49b
|
|
BLAKE2b-256 checksum How to use checksums |
00193eeb100da3529db71132b52bdfec4db714d357a9857937881ef95aefdb67
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 18, 2026.
Transparency log