注釈
Go to the end to download the full example code
チャートの基本#
この例では,さまざまなタイプのチャートをシーンに追加する方法を示しています.より複雑な例として,同じレンダラーで複数のチャートをオーバーレイとして組み合わせる方法は, チャートのオーバーレイ にあります.
import numpy as np
import pyvista as pv
rng = np.random.default_rng(1) # Seeded random number generator for consistent data generation
この例では,ランダムに抽出された100個のデータポイントから2次元の散布図を作成する方法を示します.デフォルトでは,チャートは軸を自動的にリスケールし,プロットされたすべてのデータが見えるようになっています.チャートの上で右クリックすると,チャートのズームやパンが可能です.
データポイントを線で結ぶには,以下の例のように2Dのラインプロットを作成することができます.また,カスタム軸の範囲を自分で指定することで,プロットされたデータを動的に 'ズームイン' することができます.
また,一般的な pyvista.Chart2D.plot()
関数を使って,ラインとマーカーの両方のスタイルを一度に指定することで,散布図とラインプロットを簡単に組み合わせることができます.
次の例では,2本のポリラインの間に塗りつぶし領域を作成しています.
x = np.linspace(0, 10, 1000)
y1 = np.cos(x) + np.sin(3 * x)
y2 = 0.1 * (x - 5)
chart = pv.Chart2D()
chart.area(x, y1, y2, color=(0.1, 0.1, 0.9, 0.5))
chart.line(x, y1, color=(0.9, 0.1, 0.1), width=4, style="--")
chart.line(x, y2, color=(0.1, 0.9, 0.1), width=4, style="--")
chart.title = "Area plot" # Set custom chart title
chart.show()
棒チャートにも対応しています.複数の棒チャートが隣り合って配置されています.
x = np.arange(1, 13)
y1 = rng.integers(1e2, 1e4, 12)
y2 = rng.integers(1e2, 1e4, 12)
chart = pv.Chart2D()
chart.bar(x, y1, color="b", label="2020")
chart.bar(x, y2, color="r", label="2021")
chart.x_axis.tick_locations = x
chart.x_axis.tick_labels = [
"Jan",
"Feb",
"Mar",
"Apr",
"May",
"Jun",
"Jul",
"Aug",
"Sep",
"Oct",
"Nov",
"Dec",
]
chart.x_label = "Month"
chart.y_axis.tick_labels = "2e"
chart.y_label = "# incidents"
chart.show()
バーを横に並べて描くのではなく,重ねて描きたい場合は,yの値を連続して渡します.
x = np.arange(1, 11)
ys = [rng.integers(1, 11, 10) for _ in range(5)]
labels = [f"Machine {i}" for i in range(5)]
chart = pv.Chart2D()
chart.bar(x, ys, label=labels)
chart.x_axis.tick_locations = x
chart.x_label = "Configuration"
chart.y_label = "Production"
chart.grid = False # Disable the grid lines
chart.show()
同様に,複数のエリアプロットを重ねることもできます.
これまでの例で使用したフレキシブルなChart2Dの他にも,いくつかの専用チャートを作成することができます.下の例では,円チャートを作成することができます.
データセットの統計情報を要約するには,箱ひげ図を簡単に作成することができます.
pyvistaやVTKでサポートされていない他のタイプのチャートを追加したい場合は,matplotlibを使ってカスタムチャートを作成し,pyvistaのプロットウィンドウに埋め込むことができます.以下の例は,これをどのように行うかを示しています.
import matplotlib.pyplot as plt
# First, create the matplotlib figure
f, ax = plt.subplots(
tight_layout=True
) # Tight layout to keep axis labels visible on smaller figures
alphas = [0.5 + i for i in range(5)]
betas = [*reversed(alphas)]
N = int(1e4)
data = [rng.beta(alpha, beta, N) for alpha, beta in zip(alphas, betas)]
labels = [f"$\\alpha={alpha:.1f}\\,;\\,\\beta={beta:.1f}$" for alpha, beta in zip(alphas, betas)]
ax.violinplot(data)
ax.set_xticks(np.arange(1, 1 + len(labels)))
ax.set_xticklabels(labels)
ax.set_title("$B(\\alpha, \\beta)$")
# Next, embed the figure into a pyvista plotting window
p = pv.Plotter()
chart = pv.ChartMPL(f)
chart.background_color = 'w'
p.add_chart(chart)
p.show()
Total running time of the script: (0 minutes 2.716 seconds)