Gribouille 0.3.0:Typst 用のグラフィック文法

2026/06/15 22:35

Gribouille 0.3.0:Typst 用のグラフィック文法

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

要約

Japanese Translation:

本文は、統計グラフ描画パッケージ Gribouille のバージョン 0.3.0 のリリースをアナウンスする。この更新には、theming オプションの強化、

geom-area()
のスタッキング動作の改善、注釈におけるクリップサポートなどの大幅な改修が含まれる。特に重要な点は、plot management および描画構文に関する破壊的な変更の実装である。具体的には、
plot()
関数へ直接
defer
を渡す方法から
defer(plot, ...)
の使用へと置き換えられ、また
compose()
内の panels はもはや幅や高さの引数を扱わなくなった。従来の古式化した手法(例:
guide-none()
)は、新しい guides API(例:
guides(x: none)
)によって代替されている。2D/六角ビンにおける密度指標については、ggplot2 の動作と整合させるため、セルの総数に対する割合として表現されるようになった。その他の向上点には、凡例キーの位置付けの微調整、変換対象のドメイン検証、「chrome」のスタイリングを制御するための
compose()
への theme パラメータの追加などが含まれる。資金未確保かつ暇時プロジェクトとしての Gribouille は、現時点でバグ報告については Issue tracker を受け付けているが、プルリクエストは受付していない。アップグレードするユーザーは、パネル次元、凡例構文、面積幾何学のデフォルト動作に関するコードの調整を行う必要がある。これにより、正しい描画が保証される。

本文

Gribouille 0.3.0 リリース:ガイド制御の強化と
compose()
のテーマ機能

Gribouille の新版本 0.3.0 がリリースされました。今回のバージョンは範囲が狭められつつも、特に「ガイド(axes や legends)の制御」機能を大きく強化しています。

🚀 主な変更点一覧

  • ガイドの簡易制御:
    theme()
    を通じた複雑な設定を不要にし、単一の引数で刻み線や凡例を消せるようになりました。
  • compose()
    のテーマ統合
    : コンポジション全体の装飾要素を一度に定義可能になり、パネル間でカスケード適用がスムーズになりました。
  • defer()
    構文の刷新
    :
    plot(..., defer: true)
    が非推奨となり、
    defer(plot, ...)
    が新しい標準となりました。
  • geom-area()
    のデフォルト挙動変更
    : スタック描画とアライメントがデフォルトになり、異なる X 値を持つデータの再サンプリングが自動化されました。
  • annotate()
    のクリップ機能
    :
    clip: false
    オプションにより、パネル範囲を超えてマークを表示できるようになりました。
  • 放射座標系のガイド制御:
    coord-radial
    向けに角度軸と半径軸の刻み制御機能が追加されました。

Typst Universe でインストール

#import "@preview/gribouille:0.3.0": *

🔧 ガイド(Guide)制御の新機能

これまで

theme()
介して設定する必要があった刻み線や凡例の非表示処理が、直接の関数呼び出しで実現可能です。

X/Y 軸のガイド制御

  • guides(x: none)
    /
    guides(y: none)
    : 刻み線とラベルを消去します(軸ライン・グリッド・タイトルは維持)。
  • guides(default: none)
    : 個別設定がないすべての美学に対し凡例を非表示にします。
  • 代替機能: 以前削除された
    guide-none()
    の代わりに使用されます。
#plot(
  data: penguins,
  mapping: aes(x: "flipper-len", y: "body-mass", colour: "species"),
  layers: (geom-point(size: 2pt, alpha: 0.7),),
  guides: guides(x: none), // X 軸の刻み線とラベルのみ削除
  labs: labs(
    title: "Ticks Off, Grid Stays",
    x: "Flipper Length (mm)",
    y: "Body Mass (g)",
  ),
  theme: theme-minimal(),
  width: 12cm,
  height: 8cm,
)

凡例の制御

  • guides(none)
    : すべての凡例を隠します。
  • guides(auto)
    : デフォルト挙動に戻ります。
  • guides(default: none)
    : 個別設定がない美学に適用され、凡例なしの状態を作ります。
#plot(
  data: penguins,
  mapping: aes(x: "flipper-len", y: "body-mass", colour: "species"),
  layers: (geom-point(size: 2pt, alpha: 0.7),),
  guides: guides(default: none), // 凡例を削除
  labs: labs(
    title: "No Legends",
    x: "Flipper Length (mm)",
    y: "Body Mass (g)",
  ),
  theme: theme-minimal(),
  width: 12cm,
  height: 8cm,
)

放射座標系 (
coord-radial
) での制御

  • guides(theta: none)
    : 全角度軸(円弧・刻み目・ラベル)を隠す。
  • guides(r: none)
    : 半径方向の刻み目ラベルのみを非表示にする(spoke と円は残る)。
#plot(
  data: penguins,
  mapping: aes(x: "species", fill: "species"),
  layers: (geom-bar(),),
  coord: coord-radial(),
  guides: guides(theta: none, default: none), // 角度軸と凡例を隠す
  labs: labs(
    title: "Angular Axis Hidden",
    x: none,
    y: "Count",
  ),
  theme: theme-minimal(),
  width: 10cm,
  height: 10cm,
)

🧩
compose()
とテーマの統合

compose()
関数に新しい
theme:
引数が追加され、コンポジション全体の装飾要素(共有タイトル・凡例・タグなど)を一元的に管理できます。これにより、個別パネルでのテーマ設定を繰り返すことなく統一したスタイルが実現します。

破壊的変更と対応策

  • 構文の置き換え:
    • 旧:
      plot(..., defer: true)
    • :
      defer(plot, ...)
  • サイズ指定の変更: パネル内の
    width
    /
    height
    指定が削除されました。コンポジション側でセルサイズを決定します。
#let panel(y, title) = defer(plot,
  data: penguins,
  mapping: aes(x: "flipper-len", y: y, colour: "species"),
  layers: (geom-point(size: 2pt, alpha: 0.85),),
  labs: labs(title: title, x: none, y: none),
)

#compose(
  panel("body-mass", "Body Mass"),
  panel("bill-len", "Bill Length"),
  columns: 2,
  tag-levels: "1",
  tag-prefix: "(",
  tag-suffix: ")",
  guides: guides(default: guide-legend(position: "bottom")),
  labs: labs(title: "One Theme, Two Panels"),
  theme: theme-minimal(), // 全体に適用されるテーマ
  width: 18cm,
  height: 8cm,
)

📈 geom-area() のデフォルト変更

面積図の描画ロジックが簡素化され、以下のデフォルト設定になりました。

  • デフォルト挙動:
    stat: "align"
    および
    position: "stack"
    が自動的に採用されます。
  • メリット:
    • 明示的な引数指定なしでスタック描画が実現します。
    • stat: "align"
      により、異なる X 値を持つグループも共通グリッド上に再サンプリングされ、X 値を揃える手間が省けます。
#let series = (
  (x: 0, y: 5, g: "A"), (x: 1, y: 8, g: "A"), (x: 3, y: 6, g: "A"), (x: 4, y: 9, g: "A"),
  (x: 0, y: 3, g: "B"), (x: 2, y: 5, g: "B"), (x: 3, y: 4, g: "B"), (x: 4, y: 6, g: "B"),
  (x: 0, y: 2, g: "C"), (x: 1, y: 3, g: "C"), (x: 2, y: 2, g: "C"), (x: 4, y: 4, g: "C"),
)

#plot(
  data: series,
  mapping: aes(x: "x", y: "y", fill: "g"),
  layers: (geom-area(),), // デフォルトでスタック描画に再サンプリングされる
  labs: labs(
    title: "Stacked by Default",
    x: "x",
    y: "y",
    fill: "Group",
  ),
  theme: theme-minimal(),
  width: 12cm,
  height: 8cm,
)

🏷️ annotate() でパネル外表示の実現

annotate()
関数に
clip
オプションが追加され、描画範囲の制御が強化されました。

  • デフォルト (
    clip: true
    )
    : パネル範囲外のマークはクリップされます(従来の動作)。
  • clip: false
    :
    • 軸やパネル境界を超えてもマークを可視化します。
    • 角部の注釈やデータ範囲外への配置、余白内の装飾要素に便利です。
    • 修正点: スケール外にある注釈(以前のバージョンでは無視されていた)が正しく描画されるようになりました。
#plot(
  data: penguins,
  mapping: aes(x: "flipper-len", y: "body-mass"),
  layers: (
    geom-point(size: 2pt, alpha: 0.6),
    annotate(
      geom-text(label: "← past the edge"),
      x: 235, // パネル範囲を超えた位置
      y: 5000,
      clip: false, // クリップを無効化
    ),
  ),
  labs: labs(
    title: "Annotation Outside the Panel",
    x: "Flipper Length (mm)",
    y: "Body Mass (g)",
  ),
  theme: theme-minimal(),
  width: 12cm,
  height: 8cm,
)

🛠️ 内部構造・修正・改善

本リリースの多くは機能追加ではなく、既存の問題に対する修正です。

レイアウトと凡例の改善

  • 凡例整列: 水平凡例で中央/右揃えにした際、キーグラフィックも適切に配置されます。
  • グリッド対応:
    guide-legend(nrow:)
    /
    ncolumn:
    は連続値スケールの凡例にも適応し、グリッド上にキーを配置します。
  • エラーレポートの改善:
    • guide-legend(align:)
      に無効な文字列を渡すと、以前は静黙に無視されていたのが明確なエラーとして報告されます。
    • 空間不足による凡例の重なりのようなレイアウト問題も、エラーとして通知されるようになりました。

統計関数とスケール動作

  • 密度計算 (
    stat-bin-2d
    ,
    stat-bin-hex
    )
    : セル内のカウント比率として計算され、ggplot2 と整合性が取られました。
  • 変換の検証 (
    sqrt
    ,
    log10
    )
    : ドメイン外データに対し明確なエラーを報告し、零点での軸挙動が適切になります。
  • 範囲外フィルタ: スケール拡大 (
    scale expand
    ) を尊重し、ヘッダーム内のポイントや注釈を保持します。
  • パラメータ適用:
    geom-linerange()
    alpha
    パラメータが正しく適用されるようになりました。

📝 エディタサポート:Tinymist ドキュメント

公開パッケージには Tinymist 向けのドキュメント文字列(docstrings)が含まれています。

  • 互換性のあるエディタで関数名にカーソルを置くと、引数や戻り値、使用例がフォーマットされます。
  • 可変長シンクでも、受け付けるキーが明示的にリストされるため、API の確認が容易です。

まとめ

Gribouille 0.3.0 では、ガイド制御の粒度が細かくされ、テーマ設定の手間が省かれました。特に

compose()
へのテーマ統合は、大規模なコンポジションを作成する際のパフォーマンス向上につながります。

🌐 リンク集

⚠️ 注意: Gribouille は資金を受けていない趣味のプロジェクトです。バグ報告やアイデアは Issue tracker で大歓迎ですが、Pull Request の受入れは停止しています(ローンチ記事参照)。ご耐心等待ください。

同じ日のほかのニュース

一覧に戻る →

2026/06/20 0:10

ATProto のインスタンスはありません

## Japanese Translation: 以下は、不足していた特定の詳細を統合しつつ流れを保つ改訂版です。 # 改善されたサマリー 記事は、「Bluesky インスタンス」について尋ねることがカテゴリエラーであることを明確にし、atproto がデータのホスティングとアプリケーションを根本的に分離することにより、Mastodon のような孤立した「インスタンス」という概念を排除していることを説明します。従来のモデルでは、これらの結合されたシステムが「領邦」を生み出し、インスタンス所有者がユーザーを追放できる一方、atproto においてはアイデンティティはサーバーではなくユーザーのデータに属しています。この構造により、ユーザーはソーシャルグラフへのアクセスを失うことなくホスティングプロバイダーを即座に切り替えるか、自動的にデータを移行することが可能になります。エコシステムはまたアプリの独立性を育みます; ユーザーは特定のクライアントに依存するのではなく、「Tangled」や「Semble」などのさまざまなアプリケーション間で切り替えたり、著者が言及したプロジェクトのようなカスタムオープンソースアプリを構築して任意のホストからのデータを集約したりすることができるようになります。リレーや Cloudflare などの特定のインフラストラクチャツールがこのモデルを可能にしており、データベースは孤立したアイデンティティサイロとして機能するのではなく、モデレーションの多様性またはキャッシュのために複数のコピーを実行します。したがって、業界は「インスタンス数」のような誤解を招く指標から離れ、ユーザー主体性、多様なアプリ開発、そして真のデータポータビリティによって定義されるより健全なエコシステムへと移行します。

2026/06/20 1:28

现代汽车收购波士顿动力

## Japanese Translation: 現代自動車グループは、ボストン・ダイナミクスの残りの株式 9.65%(ソフトバンク保有分)を約 11 億ドルの総評価額にて 3 億 2500 万ドルで買収し、2026 年 6 月 22 日に完了させる計画を発表しました。これによりボストン・ダイナミクスは現代自動車の完全子会社となり、ソフトバンクが保有していた行使権(put option)も終了します。現代自動車は、アトラス型ヒューマノイドロボットをその製造エコシステムへ統合することを意図しており、まず 2026 年 1 月 5 日にラスベガスで開催される CES において電気式のアトラスを実演し、その後 2028 年までにジョージア州サバnahna 附近的 EV 工場において生産モデルを立ち上げる予定(当初は部品の組立順序化に適用され、2030 年頃にはより重機業務へ拡大)です。商業的な実現可能性を確保するため、ボストン・ダイナミクスの CEO ロバート・プレイターは、アトラスが導入される前に新しい工場タスクを 1〜2 日以内に学習し、稼働率を 99.9% に達することを高い基準として設定しました。現代自動車モビスは、主要なハードウェアを一貫したグループの工業基盤と整合させるために重要なアクチュエータを生産します。競合他社がテスラのフリーモントでのオプティマスや、Figure AI の BMW との共同試験、または Unitree の低価格モデルなど「展示」に注力するのと対照的に、現代自動車は CES 会場でのデモではなく持続的な稼働時間を重視し、自社の工場を利用して制御された工場内導入を追求しており、ジョージア州のメタプラントから着手します。また、この動きはソフトバンクがボストン・ダイナミクスからの戦略的転換を図り、Roze AI へシフトすることで、単なる製品会社としての緩やかな収益曲線ではなく、物理インフラ(エネルギー・建設分野)での出資を求めていることとも反映しています。完全な所有権を確保した現代自動車は、マイノリティー株式や外部パートナーに依存するのではなく、高ボリューム製造環境におけるロボティクス未来を自社で掌握することを目指しています。

2026/06/13 17:21

音波を使ってエスプレッソを抽出。コーヒーの Brewing に必要なエネルギー使用量を 3 分の 1 に削減できる

## Japanese Translation: 研究者たちは、熱ではなく音波を用いて室温で濃厚で高い抽出強度を持つコーヒーを製造する革新的な「超音波エスプレッソ」法を成功裏に開発しました。 blind な味覚検査では、この飲料が従来のホットエスプレッソと区別不能であることを示し、芳香、風味、強度のすべてにおいて同様に優れており、熱エネルギーがクラシックなエスプレッソの特徴に必要なものではないことを証明しています。特にフィルタコーヒーとの比較において、超音波版の方が、より心地よい苦味のために参加者によって好まれるという結果となりました。この技術は、抽出時間を 3 分未満に縮めるために振動子を用いて音響カビテーション(コールドミルクのように小さな泡が生じ、コーヒー粉を破砕する現象)を生み出します。水をお湯まで加熱する必要がないため、標準的な淹れ方における高い熱エネルギー需要や、アイスドリップのような長時間 steep する必要性に対応し、最大 75% も少ないエネルギーを使用します。得られる濃縮液は強力かつ滑らかであるため、ボトル入り飲料、乳成分を含む飲料、または即席飲料製品での即時消費に最適です。もし工業的な生産が効果的にスケールすれば、この手法は品質を損なうことなく運営コストを大幅に削減し、炭素排出量を減らすことができ、世界中のコーヒー業界を持続可能な道筋を提供しつつ、消費者の満足度も保つことができるでしょう。

Gribouille 0.3.0:Typst 用のグラフィック文法 | そっか~ニュース