Show HN: XY – 高速でモジュール化可能で GPU 加速されたインタラクティブ描画ライブラリ

2026/07/29 0:54

Show HN: XY – 高速でモジュール化可能で GPU 加速されたインタラクティブ描画ライブラリ

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

元のサマリーは強く、簡潔で正確です。しかし、キーポイントリストに基づいてそれを完全に包括的にするために、出力形式、具体的な統合方法(Reflex)、およびより正確なロードマップリストを含めるように強化しました。

改善されたサマリー:
XY は、Web、ノートブック、および静的エクスポート(HTML、PNG、SVG、PDF)向けの高性能な Python グラフィクリブラリです。その核心的な強みは、Rust エンジンを採用し、表示されているデータポイントのみを処理することにあります。これにより、1 万点から 1 億点以上までのスケール(および OpenStreetMap の数十億点のデータセットを成功裏にレンダリング)を数ミリ秒で処理でき、Matplotlib や Plotly などの伝統的なツールを大幅に上回ります。チャートは宣言的に定義するか、標準的な

matplotlib.pyplot
規約を用いて定義でき(Python、CSS、または Tailwind を用いた完全なカスタマイズが可能)、シンプルな
pip
または
uv
インストールにより既存のワークフローとシームレスに統合されます。XY は初期に全てのデータをロードせずにパン、ズーム、ホバーなどのインタラクティブ機能をサポートし、JavaScript も iFrame も使用せずに高忠実度の可視化を届けるために Reflex と統合されます。今後の展開として、ライブラリは Python データサイエンスとインタラクティブな Web 配信のギャップを埋めるために高度な分析ドメインへと拡大しており、今後の機能には 3D ボリューム可視化、回帰診断、カテゴリー分布(boxen、rug)などが含まれます。

本文

XY:高速かつ対話型の Python チャート描画ライブラリ

XY は、ウェブ、ノートブック、そして静的エクスポート用に最適化された、極めて高速で対話可能かつカスタマイズ可能なPython チャート描画ライブラリです。

チャートの構成は宣言的に行うか、matplotlib の慣習に沿って行うことができます。Python、CSS、あるいは Tailwind を使用して完全にカスタマイズが可能です。

特徴とパフォーマンス

  • 小規模データ: 小さなチャートでは、すべての点がブラウザに送信されます。
  • 大規模データ: 大きなチャートの場合、Rust コアがスクリーンの解像度に基づいて表示に必要な部分のみを計算し処理します。
    • パン(画面移動)、ズーム、ホバー、および選択操作により、新しい範囲に対して同一のプロセスを実行することで詳細を表示できます。
    • 選択結果には元の行データが返されます。
  • 超大規模データ対応: XY を使用すれば、OpenStreetMap の全データを可視化することが可能です(約 100 億点)。

重要: XY はアルファ版であり、頻繁な機能追加が行われています。⭐️ リポジトリをスターして進捗状況をご確認ください


インストールと使用方法

XY は日常的なプロットから大規模データセットまで、あらゆる用途に対応します。一度作成したチャートは、ノートブックやウェブアプリで使用し、HTML、PNG、SVG、あるいは PDF としてエクスポートすることもできます。

インストール

pip install xy
# または、uv を使用する場合
uv add xy

はじめに:基本的な描画

チャートは、その内部に含まれるマーク(描画対象)を備えたコンテナーです。シーケンスであればどのようなものでも動作し、NumPy の利用はオプションです。

import xy

chart = xy.line_chart(xy.line([1, 2, 3, 4, 5], [120, 180, 165, 240, 310]))

# エクスポート
# chart.to_html("chart.html")
# chart.to_png("chart.png")
# chart.to_svg("chart.svg")

# ノートブック内では自動的に描画されます
chart 

大規模データ:密度表面への対応

同様の API を使用することで、1 億点ものデータもスケールさせられるです(密度マップ機能):

import numpy as np
import xy

rng = np.random.default_rng(7)
n = 100_000_000

r = 6.0 * rng.beta(1.2, 3.0, n)
theta = 2.9 * np.log1p(r) + rng.integers(0, 4, n) * (np.pi / 2) + rng.normal(0, 0.045 + 0.016 * r, n)

chart = xy.scatter_chart(
    xy.scatter(
        r * np.cos(theta),
        r * np.sin(theta),
        color=np.exp(-r / 2.2),
        colormap="magma_r",
        density=True,
        opacity=0.85,
        # ビューが実質的な行にズームインした際にマーカーを大きくし、不透明度を増加させます。
        size=2.5,
        zoom_size_factor=2.6,
        zoom_opacity=0.95,
    ),
    xy.theme(
        background="#ffffff", 
        plot_background="#ffffff", 
        grid_color="#e6e6e1",
        axis_color="#c3c2b7", 
        text_color="#0b0b0b",
    ),
    title="1 億点",
)

chart

matplotlib から移行する場合

一般的な pyplot ワークフローであれば、インポート语句を変更し、描画コード自体はそのまま利用できます:

import numpy as np
import xy.pyplot as plt

x = np.linspace(0, 10, 200)
fig, ax = plt.subplots()
ax.plot(x, np.sin(x), "r--", label="signal")
ax.legend()
plt.show()

互換性情報については、互換性情報ガイド をご参照ください(すべてのチャートタイプや機能はまだ対応していない可能性があります)。


各レイヤーのカスタマイズ

Python を使用して、マーク(図形)や軸から対話機能、レイアウトまで制御可能です。

  • マーク (Marks): カラー、サイズ、不透明度、記号、グラデーション、ストローク、カーブ、カラーマップを制御します。
  • ガイド (Guides): 軸、目盛り、グリッド、注釈、凡例、カラーバー、ツールチップのカスタマイズを行います。
  • 対話機能 (Interaction): パン、ズーム、ホバー、選択範囲、十字線、コールバック関数、リンクされたチャートを追加します。
  • レイアウト (Layout): レイヤーとフェイスを作成し、レスポンシブなサイズを設定、テーマを適用します。
chart = xy.line_chart(
    xy.line(x, y, color="#7c3aed", width=3),
    class_name="rounded-xl bg-white",
    class_names={"tooltip": "rounded-lg bg-zinc-900 text-white"},
)

詳細な情報は スタイルガイド機能マトリックス をご参照ください。


ベンチマーク結果

ライブ対話型チャートにおける 1 万点から 1 億点までのパフォーマンスです。すべてのライブラリは各行を取得し、実際のブラウザ上で独自の入力パスを通過させています。時計が止まるのは、キャンバスが正しく描画されかつ安定している時点からです。

結論

  • XY は 1 万点で 0.071 秒、1 億点で 0.081 秒という結果を出し、4 つの桁のスケールにおいて安定した性能を発揮します。
  • これは、20 万行を超えた場合、各行ごとの単一マークを描画するのではなく、画面境界に束縛された密度表面を描画するためであり、ズーム操作によって詳細な行データに戻れるためです。
  • 正確なマークごとの描画パスは N(データ数)と比例してスケールします:Matplotlib は約 300 万点で 1 秒を超え、5,000 万点では 13.4 秒に達します。

パフォーマンス比較 (各点が画面に表示されるまでの時間)

ライブラリ / 条件10k100k500k1M2.5M5M10M25M50M100M
XY0.0710.0720.0750.0840.0830.0890.0830.0770.0760.081
XY (density=False)0.0850.0740.0870.0980.1110.1440.2060.4240.6451.343
Matplotlib (WebAgg)0.0860.1150.2240.3570.7581.4242.8046.83813.385
Plotly (scattergl)0.3410.3730.4770.6141.0331.7853.3679.794

メモリ消費量 (ピーク Python サイド: GiB)

(ブラウザ内のメモリは別途追跡されており、ここでは除外されています。ヘッドレス Chrome は約 1 GiB を消費)

ライブラリ / 条件10k100k500k1M2.5M5M10M25M50M100M
XY0.050.050.060.070.130.190.320.701.362.58
XY (density=False)0.050.050.070.100.180.310.571.352.665.26
Matplotlib (WebAgg)0.090.090.120.150.280.460.842.063.85
Plotly (scattergl)0.210.180.280.360.601.051.864.70

測定環境:Apple M5 Pro。詳細については ベンチマーク実施ガイド をご参照ください。


Reflex アプリへの埋め込み

reflex-xy
アダプターは、任意の XY チャートをJavaScript や iframe、別々のチャートサービスを使わずに、通常の Reflex コンポーネントに変換します。

インストール

pip install reflex-xy
# または、uv を使用する場合
uv add reflex-xy

設定と使用

アダプターを一度だけ登録してください (

rxconfig.py
):

import reflex as rx
import reflex_xy

config = rx.Config(
    app_name="dashboard",
    plugins=[reflex_xy.XYPlugin()],
)

その後、コンポーネントツリーのどこかにチャートを追加できます:

import reflex as rx
import reflex_xy
import xy

signups = xy.line_chart(
    xy.line([1, 2, 3, 4, 5], [120, 180, 165, 240, 310]),
    title="Weekly signups",
)


def index() -> rx.Component:
    return rx.card(
        rx.heading("Growth"),
        reflex_xy.chart(signups, height="320px"),
        width="100%",
    )


app = rx.App()
app.add_page(index)

ホバー、パン、ズームも引き続き動作します。Reflex のステートやイベント、ライブストリームによって駆動されるチャートについては、Reflex インテグレーションガイド をご参照ください。


サンプル例

各ノートブックは、連結された公開ソースから行データを取得します。このリポジトリには生のデータセットは保存されていません。

詳細な設定については、サンプルガイド をご参照ください。


仕組みについて

多くのチャート描画スタックは、すべての値を JSON としてシリアライズし、ブラウザにすべてのマークを描画させるように指示します。XY は正確な値を

ColumnStore
に保持し、Rust で詳細度レベルを計算し、型付きのバイナリバッファを転送します。

  • API: Python API / チャートの構築
  • STORE: ColumnStore / 正規化された f64 カラムの保持
  • CORE: ネイティブ Rust 計算 / 直接処理・減衰処理・密度処理
  • PAYLOAD: コンパクトなペイロード / データのない JSON 仕様の追加、型付きバイナリバッファ
  • RENDER: ブラウザまたはノートブック / WebGL2 マーク・キャンバス軸・DOM インターフェース

つまり、密な全体像では集計処理を行い、狭いビューでは正確な点を返すことができます。正規化された f64 データは Python に保持されるため、ホバーや選択操作でも元の行データを返します。詳細な設計については 設計ドossier をご参照ください。


ロードマップ

まず広範な 2D カバレッジを行い、その後地理的、3D、そしてボリューム可視化へと展開します。特定の期限は設定していません:

  • カテゴリ分布: ストライプ、スウォーム、ビーゾム、ボックスエン、ルグ
  • 回帰診断: テンドライン、残余、QQ プロット、PP プロット
  • 散乱行列および共同プロット: SPLOM、ペアグリッド、周辺ヒストグラム
  • 円グラフ / ドーナツグラフ: 現在
    xy.pyplot
    で利用可能で、後ほど
    xy.pie_chart(xy.pie(...))
    へ昇格予定
  • ロージック/OHLC および金融オーバーレイ: SMA、VWAP、ボリンジャーバンド、RSI、MACD;プロトタイプ済み
  • ウォーターフォールおよびファンネル
  • 樹形図、サンバースト、イシクル
  • レーダー/極座標およびゲージ: 極座標軸が必要です。
  • 傾斜、バンプ、ダムベル
  • 3D およびボリューム: 散乱、曲面、メッシュ、等表面、そして体積ビュー

完全なランク順のバックログについては チャートロードマップ をご参照ください。必要であれば Issue をお送りください。

同じ日のほかのニュース

一覧に戻る →

2026/07/29 5:52

OpenAIがCodex Securityをオープンソース化した

## Japanese Translation: `@openai/codex-security` ツールは、コードベース内に直接存在するセキュリティ脆弱性を特定、検証、修正することを目的とした CLI と TypeScript SDK です。このツールにより、チームはリポジトリの走査、コード変更のレビュー、発見結果の自動追跡が可能となり、安全な開発ライフサイクルが効率化されます。ユーザーはワークフローにこれらのチェックを簡単に統合できます:ローカルでの使用には `npm install @openai/codex-security` でインストールし、`npx codex-security login` でログインし、`npx codex-security scan .` で走査を実行します。継続的インテグレーション(CI)パイプラインでは、ログインを必要とせず `OPENAI_API_KEY` 環境変数を設定することで自動化がサポートされます。该软件は現代的な環境(Node.js 22+ または Python 3.10+)で動作し、GitHub Actions などの既存の CI システムにシームレスに統合できます。TypeScript SDK を活用することで、開発者はビルドプロセス内でチェックをプログラム的に初期化し、レポートパスを直接ログ出力できます。この反応的な修正から能動的な予防への転換により、チームは手動介入なしで効率的に堅牢なセキュリティ標準を維持できるようになります。

2026/07/29 1:58

Substack の書き手にはウェブサイトが必要です。

## 日本語訳: 著者は、長期的な生存を確保するため、Substack を単なる配信チャネルとして厳格に扱うべきであり、主なデジタル居宅としては見なしてはならない。`substack.com` などのプラットフォームへの一依存はリスクが高く、同社は規約を変更した場合、著者がコンテンツや可见性(視認性)を失う可能性があるためであり、過去に Twitter、Medium、Reddit、Facebook が直面した状況と同様です。「デジタルテナント」または「デジタル小作農家」として突然の立ち退きに晒されることを避けるために、クリエイターは自らの独立したドメイン所有し、ホームベース(主要サイト)を自らコントロールする必要があります。著者ジョン・スカルズィはこの戦略を例示しており、その 28 年間の歴史を持つ独立ブログが安定的な錨(アンカー)として機能し、ソーシャルメディアはそのトラフィックをそちらへ誘導するための単なる増幅器として使用しています。このアプローチは POSSE(自サイトの公開他サイトへの Syndication:Publish On Your Own Site, Syndicate Elsewhere)手法と整合しており、RSS フィードを通じて著者の「事実上の真実源」から発信されたコンテンツが外部プラットフォームへと配信されることを保証します。これにより、将来の企業崩壊、アルゴリズムのシフト、無警告で少数派やローカライズされた声を沈黙させる可能性があるエコーチェンバーに対する防護策となります。独立したデジタル居宅を確保することで、著者は過渡的なエコシステムに対する耐性を保証し、ユーザーもクリエイターも利得志向のアルゴリズムに人質となるのを防ぎます。

2026/07/29 5:58

ハーフライフを Mac OS 9 に移植

## Japanese Translation: ### サマリー: ハーフライフシリーズが、オリジナルタイトル発売から 28 年ぶりに、PowerPC ベースのマッキン托しコンピュータ向けの初プレイ可能版をリリースしました。これは GitHub ユーザー doctashay が Xash3D FWGS エンジンのフォーク(GoldSrc テクノロジーのリ実装)を用いて作成したものであり、Valve による過去のキャンセルされた計画や、Intel チップへの移行後の 2013 年版に続く長らくの空白を埋めるものです。このファングレードリリースには、『ハーフライフ』、『ブルー・シフト』、『オポージング・フォース』および『Uplink』のデモが含まれ、マルチプレイヤー対応を含み、開始から終了までフルプレイ可能です。Mac OS 9.0 以降で G3 や G4 プロセッサーなどのレガシーハードウェア上で動作し、廃棄されたシステムにも新たな生命を与え、これまでこれらのプラットフォームでは入手不可能だった象徴的なタイトルへのアクセスを維持します。この成就是マッキン托しゲームコミュニティにとって重要ですが、性能はユーザーのグラフィックカードに大きく依存します。VRAM が限られたデバイス(8MB 未満の iMac や iBook など)では動作が困難な場合があります。まだ公式 Valve プロダクトではありませんが、このリリースは PowerPC マクintosh の計算機史におけるキャンセルされた時代を成功裡に蘇らせます。

Show HN: XY – 高速でモジュール化可能で GPU 加速されたインタラクティブ描画ライブラリ | そっか~ニュース