> ## Documentation Index
> Fetch the complete documentation index at: https://wb-21fd5541-wbdocs-1882.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# カスタムチャートの概要

> Vega の可視化機能を使って、W&B プロジェクトでカスタムチャートを作成する

W\&B プロジェクトでカスタムチャートを作成できます。任意のデータを表としてログし、思いどおりに可視化できます。[Vega](https://vega.github.io/vega/) を使えば、フォント、色、ツールチップの細部まで制御できます。

* コード: サンプルの [Colab ノートブック](https://tiny.cc/custom-charts)を試してください。
* 動画: [解説動画](https://www.youtube.com/watch?v=3-N9OV6bkSM)をご覧ください。
* 例: Keras と Sklearn のクイック [デモノートブック](https://colab.research.google.com/drive/1g-gNGokPWM2Qbc8p1Gofud0_5AoZdoSD?usp=sharing)

<Frame>
  <img src="https://mintcdn.com/wb-21fd5541-wbdocs-1882/gvIZGkH-i0H7aNZQ/images/app_ui/supported_charts.png?fit=max&auto=format&n=gvIZGkH-i0H7aNZQ&q=85&s=dc576f1a07067ee0757fa6e6d049faab" alt="vega.github.io/vega でサポートされるチャート" max-width="90%" width="2634" height="588" data-path="images/app_ui/supported_charts.png" />
</Frame>

<div id="how-it-works">
  ### 仕組み
</div>

1. **データをログする**: スクリプトから、[設定](/ja/models/track/config/) と summary データをログします。
2. **チャートをカスタマイズする**: [GraphQL](https://graphql.org) クエリでログしたデータを取得します。[Vega](https://vega.github.io/vega/) という強力な可視化記法を使って、クエリ結果を可視化します。
3. **チャートをログする**: スクリプトから `wandb.plot_table()` を呼び出して、独自のプリセットを使用します。

<Frame>
  <img src="https://mintcdn.com/wb-21fd5541-wbdocs-1882/gvIZGkH-i0H7aNZQ/images/app_ui/pr_roc.png?fit=max&auto=format&n=gvIZGkH-i0H7aNZQ&q=85&s=f9e4f0b846b4d6b5a1142a9181944c1f" alt="PR 曲線と ROC 曲線" width="1114" height="422" data-path="images/app_ui/pr_roc.png" />
</Frame>

期待したデータが表示されない場合、探している列が選択した Runs にログされていない可能性があります。チャートを Save し、Runs table に戻って、**eye** アイコンで選択した Runs を確認してください。

<div id="log-charts-from-a-script">
  ## スクリプトでチャートをログする
</div>

<div id="builtin-presets">
  ### 組み込みプリセット
</div>

W\&B には、スクリプトから直接ログできる組み込みのチャートプリセットがいくつか用意されています。これには、折れ線グラフ、散布図、棒グラフ、ヒストグラム、PR 曲線、ROC 曲線が含まれます。

<Tabs>
  <Tab title="折れ線グラフ">
    `wandb.plot.line()`

    カスタムの折れ線グラフをログします。これは、任意の x 軸と y 軸上の点 (x, y) を順番に結んだプロットです。

    ```python theme={null}
    with wandb.init() as run:
      data = [[x, y] for (x, y) in zip(x_values, y_values)]
      table = wandb.Table(data=data, columns=["x", "y"])
      run.log(
          {
              "my_custom_plot_id": wandb.plot.line(
                  table, "x", "y", title="Custom Y vs X Line Plot"
              )
          }
      )
    ```

    折れ線グラフでは、任意の 2 つの次元に対する曲線をログできます。2 つの値のリストを対応させてプロットする場合は、各リストの値の数が完全に一致している必要があります (たとえば、各点には x と y の両方が必要です) 。

    <Frame>
      <img src="https://mintcdn.com/wb-21fd5541-wbdocs-1882/gvIZGkH-i0H7aNZQ/images/app_ui/line_plot.png?fit=max&auto=format&n=gvIZGkH-i0H7aNZQ&q=85&s=f64cbde29700a809bfcc2fc87e300a43" alt="カスタム折れ線グラフ" width="1930" height="1228" data-path="images/app_ui/line_plot.png" />
    </Frame>

    [レポートの例を見る](https://wandb.ai/wandb/plots/reports/Custom-Line-Plots--VmlldzoyNjk5NTA) または [Google Colab ノートブックの例を試す](https://tiny.cc/custom-charts)。
  </Tab>

  <Tab title="散布プロット">
    `wandb.plot.scatter()`

    カスタムの散布図、つまり任意の 2 軸 x、y 上の点 (x, y) のリストをログします。

    ```python theme={null}
    with wandb.init() as run:
      data = [[x, y] for (x, y) in zip(class_x_prediction_scores, class_y_prediction_scores)]
      table = wandb.Table(data=data, columns=["class_x", "class_y"])
      run.log({"my_custom_id": wandb.plot.scatter(table, "class_x", "class_y")})
    ```

    これを使用すると、任意の2つの次元について散布点をログできます。2つの値のリストを互いにプロットする場合は、リスト内の値の数が完全に一致している必要があることに注意してください (たとえば、各点には x と y の両方が必要です) 。

    <Frame>
      <img src="https://mintcdn.com/wb-21fd5541-wbdocs-1882/g98EkbyZbbkyMi8o/images/app_ui/demo_scatter_plot.png?fit=max&auto=format&n=g98EkbyZbbkyMi8o&q=85&s=40f78eaa2a1be746a7953827ee135766" alt="散布図" width="2194" height="940" data-path="images/app_ui/demo_scatter_plot.png" />
    </Frame>

    [レポートの例を見る](https://wandb.ai/wandb/plots/reports/Custom-Scatter-Plots--VmlldzoyNjk5NDQ) または [Google Colab ノートブックの例を試す](https://tiny.cc/custom-charts)。
  </Tab>

  <Tab title="棒グラフ">
    `wandb.plot.bar()`

    数行のコードで、ラベル付きの値のリストを棒として表示するカスタムの棒グラフをネイティブにログできます。

    ```python theme={null}
    with wandb.init() as run:
      data = [[label, val] for (label, val) in zip(labels, values)]
      table = wandb.Table(data=data, columns=["label", "value"])
      run.log(
          {
              "my_bar_chart_id": wandb.plot.bar(
                  table, "label", "value", title="Custom Bar Chart"
              )
          }
      )
    ```

    これを使うと、任意の棒グラフをログできます。リスト内のラベルと値の数は完全に一致している必要があることに注意してください (たとえば、各データポイントにはその両方が必要です) 。

    <Frame>
      <img src="https://mintcdn.com/wb-21fd5541-wbdocs-1882/g98EkbyZbbkyMi8o/images/app_ui/demo_bar_plot.png?fit=max&auto=format&n=g98EkbyZbbkyMi8o&q=85&s=90a1c1a33087e1275c3a3d08454128e9" alt="棒グラフのデモ" width="659" height="579" data-path="images/app_ui/demo_bar_plot.png" />
    </Frame>

    [レポートの例を見る](https://wandb.ai/wandb/plots/reports/Custom-Bar-Charts--VmlldzoyNzExNzk) または [Google Colab ノートブックの例を試す](https://tiny.cc/custom-charts)。
  </Tab>

  <Tab title="ヒストグラム">
    `wandb.plot.histogram()`

    わずか数行で、カスタムヒストグラムをそのままログできます。ヒストグラムは、値のリストを出現回数や頻度に応じて bins に分類して表すグラフです。たとえば、予測の信頼度スコアのリスト (`scores`) があり、その分布を可視化したいとします。

    ```python theme={null}
    with wandb.init() as run:
      data = [[s] for s in scores]
      table = wandb.Table(data=data, columns=["scores"])
      run.log({"my_histogram": wandb.plot.histogram(table, "scores", title=None)})
    ```

    これを使うと、任意のヒストグラムをログできます。なお、`data` はリストのリストで、行と列で構成される 2 次元配列を表すことを想定しています。

    <Frame>
      <img src="https://mintcdn.com/wb-21fd5541-wbdocs-1882/g98EkbyZbbkyMi8o/images/app_ui/demo_custom_chart_histogram.png?fit=max&auto=format&n=g98EkbyZbbkyMi8o&q=85&s=2c3e77548fa02c51b0a0da90d8dd208b" alt="カスタムヒストグラム" width="1252" height="558" data-path="images/app_ui/demo_custom_chart_histogram.png" />
    </Frame>

    [レポートの例を見る](https://wandb.ai/wandb/plots/reports/Custom-Histograms--VmlldzoyNzE0NzM) または [Google Colab ノートブックの例を試す](https://tiny.cc/custom-charts)。
  </Tab>

  <Tab title="PR曲線">
    `wandb.plot.pr_curve()`

    1 行で [適合率-再現率曲線](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.precision_recall_curve.html#sklearn.metrics.precision_recall_curve) を作成できます。

    ```python theme={null}
    with wandb.init() as run:
      plot = wandb.plot.pr_curve(ground_truth, predictions, labels=None, classes_to_plot=None)

      run.log({"pr": plot})
    ```

    コードから次の情報にアクセスできる場合は、いつでもこれをログできます:

    * 一連のサンプルに対するモデルの予測スコア (`predictions`)
    * そのサンプルに対応する正解ラベル (`ground_truth`)
    * (任意) ラベル／クラス名のリスト (ラベルのインデックス 0 が cat、1 が dog、2 が bird などを表す場合は `labels=["cat", "dog", "bird"...]`)
    * (任意) プロットで可視化するラベルのサブセット (リスト形式のまま)

    <Frame>
      <img src="https://mintcdn.com/wb-21fd5541-wbdocs-1882/g98EkbyZbbkyMi8o/images/app_ui/demo_average_precision_lines.png?fit=max&auto=format&n=g98EkbyZbbkyMi8o&q=85&s=37aa67b46201dcd0e2fa0f0c40fbec9a" alt="適合率-再現率曲線" width="852" height="441" data-path="images/app_ui/demo_average_precision_lines.png" />
    </Frame>

    [レポートの例を見る](https://wandb.ai/wandb/plots/reports/Plot-Precision-Recall-Curves--VmlldzoyNjk1ODY) または [Google Colab ノートブックの例を試す](https://colab.research.google.com/drive/1mS8ogA3LcZWOXchfJoMrboW3opY1A8BY?usp=sharing)。
  </Tab>

  <Tab title="ROC曲線">
    `wandb.plot.roc_curve()`

    [ROC curve](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_curve.html#sklearn.metrics.roc_curve) を1行で作成します。

    ```python theme={null}
    with wandb.init() as run:
      # ground_truth は正解ラベルのリスト、predictions は予測スコアのリスト
      ground_truth = [0, 1, 0, 1, 0, 1]
      predictions = [0.1, 0.4, 0.35, 0.8, 0.7, 0.9]

      # ROC曲線のプロットを作成する
      # labels はクラス名のオプションリスト、classes_to_plot は可視化するラベルのオプションのサブセット
      plot = wandb.plot.roc_curve(
          ground_truth, predictions, labels=None, classes_to_plot=None
      )

      run.log({"roc": plot})
    ```

    コードから次のものにアクセスできる場合は、いつでもこれをログできます。

    * ある例のセットに対するモデルの予測スコア (`predictions`)
    * それらの例に対応する正解ラベル (`ground_truth`)
    * (任意) ラベル／クラス名のリスト (ラベルインデックス 0 が cat、1 が dog、2 が bird などを表す場合は `labels=["cat", "dog", "bird"...]`)
    * (任意) プロットに表示する、これらのラベルのサブセット (リスト形式のまま)

    <Frame>
      <img src="https://mintcdn.com/wb-21fd5541-wbdocs-1882/g98EkbyZbbkyMi8o/images/app_ui/demo_custom_chart_roc_curve.png?fit=max&auto=format&n=g98EkbyZbbkyMi8o&q=85&s=a6b519ea9bf0659832cbe2973873db3f" alt="ROC curve" width="1338" height="788" data-path="images/app_ui/demo_custom_chart_roc_curve.png" />
    </Frame>

    [レポートの例を見る](https://wandb.ai/wandb/plots/reports/Plot-ROC-Curves--VmlldzoyNjk3MDE) または [Google Colab ノートブックの例を試す](https://colab.research.google.com/drive/1_RMppCqsA8XInV_jhJz32NCZG6Z5t1RO?usp=sharing)。
  </Tab>
</Tabs>

<div id="custom-presets">
  ### カスタムプリセット
</div>

組み込みのプリセットを調整するか、新しいプリセットを作成して、チャートを保存します。チャートIDを使用して、スクリプトから直接そのカスタムプリセットにデータをログできます。[サンプルの Google Colab ノートブックを試す](https://tiny.cc/custom-charts)。

```python theme={null}
# プロットする列を含む表を作成する
table = wandb.Table(data=data, columns=["step", "height"])

# 表の列をチャートのフィールドにマッピングする
fields = {"x": "step", "value": "height"}

# 表を使用して新しいカスタムチャートプリセットにデータを入力する
# 保存済みのカスタムチャートプリセットを使用するには、vega_spec_name を変更する
my_custom_chart = wandb.plot_table(
    vega_spec_name="carey/new_chart",
    data_table=table,
    fields=fields,
)
```

<Frame>
  <img src="https://mintcdn.com/wb-21fd5541-wbdocs-1882/g98EkbyZbbkyMi8o/images/app_ui/custom_presets.png?fit=max&auto=format&n=g98EkbyZbbkyMi8o&q=85&s=f7106f322c9b354356c8f928b52548ca" alt="カスタムチャートプリセット" max-width="90%" width="2946" height="728" data-path="images/app_ui/custom_presets.png" />
</Frame>

<div id="log-data">
  ## データをログする
</div>

スクリプトから次のデータ型をログして、カスタムチャートで使用できます。

* **Config**: 実験の初期設定 (独立変数) です。これには、トレーニング開始時に `wandb.Run.config` にキーとしてログした名前付きフィールドが含まれます。例: `wandb.Run.config.learning_rate = 0.0001`
* **Summary**: トレーニング中にログされた単一の値 (結果または従属変数) です。たとえば、`wandb.Run.log({"val_acc" : 0.8})` です。トレーニング中に `wandb.Run.log()` でこのキーに複数回書き込んだ場合、summary にはそのキーの最後の値が設定されます。
* **History**: ログされたスカラーの完全な時系列は、`history` フィールドを通じてクエリできます
* **summaryTable**: 複数の値のリストをログする必要がある場合は、`wandb.Table()` を使用してそのデータを保存し、その後カスタムパネルでクエリします。
* **historyTable**: 履歴データを確認する必要がある場合は、カスタムチャートパネルで `historyTable` をクエリします。`wandb.Table()` を呼び出すかカスタムチャートをログするたびに、その step の history に新しい表が作成されます。

<div id="how-to-log-a-custom-table">
  ### カスタム表をログする方法
</div>

`wandb.Table()` を使用して、データを二次元配列としてログします。通常、この表の各行は 1 つのデータポイントを表し、各列はプロットしたい各データポイントに関連するフィールドや次元を表します。カスタムパネルを設定すると、表全体には `wandb.Run.log()` に渡した名前付きキー (以下の `custom_data_table`) でアクセスでき、個々のフィールドには列名 (`x`、`y`、`z`) でアクセスできます。実験全体を通して、複数のタイムステップで表をログできます。各表の最大サイズは 10,000 行です。[Google Colab で例を試す](https://tiny.cc/custom-charts)。

```python theme={null}
with wandb.init() as run:
  # カスタムデータの表をログする
  my_custom_data = [[x1, y1, z1], [x2, y2, z2]]
  run.log(
      {"custom_data_table": wandb.Table(data=my_custom_data, columns=["x", "y", "z"])}
  )
```

<div id="customize-the-chart">
  ## チャートをカスタマイズする
</div>

まず新しいカスタムチャートを追加して開始し、その後クエリを編集して表示中のRunsからデータを選択します。クエリでは、[GraphQL](https://graphql.org)を使用して、Runs内の`config`、`summary`、`history`フィールドからデータを取得します。

<Frame>
  <img src="https://mintcdn.com/wb-21fd5541-wbdocs-1882/g98EkbyZbbkyMi8o/images/app_ui/customize_chart.gif?s=29b7fe50cabaf15655c2b107db7306dc" alt="カスタムチャートの作成" max-width="90%" width="1942" height="1334" data-path="images/app_ui/customize_chart.gif" />
</Frame>

<div id="custom-visualizations">
  ### カスタム可視化
</div>

右上の **Chart** を選択して、デフォルトのプリセットから始めます。次に、**Chart fields** を選択し、クエリで取得したデータをチャート内の対応するフィールドにマッピングします。

次の画像は、メトリクスを選択し、それを下の棒グラフのフィールドにマッピングする例を示しています。

<Frame>
  <img src="https://mintcdn.com/wb-21fd5541-wbdocs-1882/g98EkbyZbbkyMi8o/images/app_ui/demo_make_a_custom_chart_bar_chart.gif?s=55e8ccefcb9125d9758a42f02d5eab09" alt="カスタム棒グラフの作成" max-width="90%" width="2804" height="1588" data-path="images/app_ui/demo_make_a_custom_chart_bar_chart.gif" />
</Frame>

<div id="how-to-edit-vega">
  ### Vega の編集方法
</div>

パネル上部の **Edit** をクリックすると、[Vega](https://vega.github.io/vega/) の編集モードに入ります。ここでは、UI 上でインタラクティブなチャートを作成するための [Vega specification](https://vega.github.io/vega/docs/specification/) を定義できます。チャートのあらゆる要素を変更できます。たとえば、タイトルを変更したり、別の配色を選んだり、曲線を連続した線ではなく点の列として表示したりできます。また、Vega の transform を使って値の配列をビニングし、ヒストグラムにするなど、データ自体を変更することもできます。パネルのプレビューはインタラクティブに更新されるため、Vega spec やクエリを編集しながら、変更の効果を確認できます。[Vega documentation and tutorials ](https://vega.github.io/vega/)を参照してください。

**フィールド参照**

W\&B からチャートにデータを取り込むには、`"${field:<field-name>}"` 形式のテンプレート文字列を Vega spec 内の任意の場所に追加します。これにより、右側の **Chart Fields** 領域にドロップダウンが作成され、Users はそれを使って Vega にマッピングするクエリ結果の列を選択できます。

フィールドのデフォルト値を設定するには、次の構文を使用します: `"${field:<field-name>:<placeholder text>}"`

<div id="saving-chart-presets">
  ### チャートプリセットの保存
</div>

モーダルの下部にあるボタンを使って、特定の可視化パネルに変更を適用できます。あるいは、Vega spec を保存して、プロジェクト内の別の場所で使用することもできます。再利用可能なチャート定義を保存するには、Vega エディタ上部の **名前を付けて保存** をクリックし、プリセットに名前を付けます。

<div id="articles-and-guides">
  ## 記事とガイド
</div>

1. [W\&Bの機械学習可視化IDE](https://wandb.ai/wandb/posts/reports/The-W-B-Machine-Learning-Visualization-IDE--VmlldzoyNjk3Nzg)
2. [カスタムチャートを使ってNLPのAttentionベースモデルを可視化する](https://wandb.ai/kylegoyette/gradientsandtranslation2/reports/Visualizing-NLP-Attention-Based-Models-Using-Custom-Charts--VmlldzoyNjg2MjM)
3. [カスタムチャートを使ってAttentionが勾配フローに与える影響を可視化する](https://wandb.ai/kylegoyette/gradientsandtranslation/reports/Visualizing-The-Effect-of-Attention-on-Gradient-Flow-Using-Custom-Charts--VmlldzoyNjg1NDg)
4. [任意の曲線をログする](https://wandb.ai/stacey/presets/reports/Logging-Arbitrary-Curves--VmlldzoyNzQyMzA)

<div id="common-use-cases">
  ## 一般的なユースケース
</div>

* 誤差バー付きの棒グラフをカスタマイズする
* 独自の x-y 座標が必要なモデルの検証メトリクス (適合率-再現率曲線など) を表示する
* 2 つの異なるモデル/実験のデータ分布をヒストグラムとして重ねて表示する
* トレーニング中の複数の時点で取得したスナップショットを使って、メトリクスの変化を表示する
* W\&B ではまだ利用できない独自の可視化を作成する (できればそれを広く共有する)
