Visualisasi hasil
Versi paket
Kode di halaman ini dikembangkan menggunakan persyaratan berikut. Kami merekomendasikan menggunakan versi ini atau yang lebih baru.
qiskit[all]~=2.3.0
qiskit-ibm-runtime~=0.43.1
Plot histogramβ
Fungsi plot_histogram memvisualisasikan hasil sampling quantum circuit pada QPU.
Fungsi ini mengembalikan objek matplotlib.Figure. Ketika baris terakhir dari code cell menghasilkan objek-objek ini, Jupyter notebook akan menampilkannya di bawah cell. Jika kamu memanggil fungsi-fungsi ini di lingkungan lain atau dalam skrip, kamu perlu menampilkan atau menyimpan output secara eksplisit.
Dua opsinya adalah:
- Panggil
.show()pada objek yang dikembalikan untuk membuka gambar di jendela baru (dengan asumsi backend matplotlib yang dikonfigurasi bersifat interaktif). - Panggil
.savefig("out.png")untuk menyimpan gambar keout.pngdi direktori kerja saat ini. Metodesavefig()menerima path sehingga kamu bisa mengatur lokasi dan nama file tempat menyimpan output. Contohnya,plot_state_city(psi).savefig("out.png").
Sebagai contoh, buat Bell state dua-Qubit:
# Added by doQumentation β required packages for this notebook
!pip install -q matplotlib numpy qiskit qiskit-ibm-runtime
from qiskit_ibm_runtime import QiskitRuntimeService, SamplerV2 as Sampler
from qiskit.transpiler import generate_preset_pass_manager
from qiskit.circuit import QuantumCircuit
from qiskit.visualization import plot_histogram
service = QiskitRuntimeService()
backend = service.least_busy(simulator=False, operational=True)
# Quantum circuit to make a Bell state
bell = QuantumCircuit(2)
bell.h(0)
bell.cx(0, 1)
bell.measure_all()
pm = generate_preset_pass_manager(backend=backend, optimization_level=1)
isa_circuit = pm.run(bell)
# execute the quantum circuit
sampler = Sampler(backend)
job = sampler.run([isa_circuit])
result = job.result()
print(result)
PrimitiveResult([SamplerPubResult(data=DataBin(meas=BitArray(<shape=(), num_shots=4096, num_bits=2>)), metadata={'circuit_metadata': {}})], metadata={'execution': {'execution_spans': ExecutionSpans([DoubleSliceSpan(<start='2026-01-15 07:11:30', stop='2026-01-15 07:11:32', size=4096>)])}, 'version': 2})
plot_histogram(result[0].data.meas.get_counts())
Opsi saat plotting histogramβ
Gunakan opsi berikut untuk plot_histogram agar bisa menyesuaikan grafik output.
legend: Memberikan label untuk eksekusi. Menerima daftar string yang digunakan untuk melabeli hasil setiap eksekusi. Ini paling berguna saat memplot beberapa hasil eksekusi dalam satu histogramsort: Mengatur urutan bar dalam histogram. Bisa diset ke urutan naik denganascatau urutan turun dengandescnumber_to_keep: Menerima integer untuk jumlah term yang ditampilkan. Sisanya dikelompokkan dalam satu bar bernama "rest"color: Mengatur warna bar; menerima string atau daftar string untuk warna yang digunakan pada bar setiap eksekusibar_labels: Mengatur apakah label dicetak di atas barfigsize: Menerima tuple ukuran dalam inci untuk membuat gambar output
# Execute two-qubit Bell state again
sampler.options.default_shots = 1000
job = sampler.run([isa_circuit])
second_result = job.result()
# Plot results with custom options
plot_histogram(
[
result[0].data.meas.get_counts(),
second_result[0].data.meas.get_counts(),
],
legend=["first", "second"],
sort="desc",
figsize=(15, 12),
color=["orange", "black"],
bar_labels=False,
)
Plotting hasil Estimatorβ
Qiskit tidak memiliki fungsi bawaan untuk memplot hasil Estimator, tapi kamu bisa menggunakan bar plot dari Matplotlib untuk visualisasi cepat.
Sebagai demonstrasi, cell berikut mengestimasi nilai ekspektasi dari tujuh observable berbeda pada sebuah quantum state.
import numpy as np
from qiskit import QuantumCircuit
from qiskit.quantum_info import SparsePauliOp
from qiskit_ibm_runtime import EstimatorV2 as Estimator
from qiskit.transpiler import generate_preset_pass_manager
from matplotlib import pyplot as plt
# Simple estimation experiment to create results
qc = QuantumCircuit(2)
qc.h(0)
qc.crx(1.5, 0, 1)
observables_labels = ["ZZ", "XX", "YZ", "ZY", "XY", "XZ", "ZX"]
observables = [SparsePauliOp(label) for label in observables_labels]
service = QiskitRuntimeService()
pm = generate_preset_pass_manager(backend=backend, optimization_level=1)
isa_circuit = pm.run(qc)
isa_observables = [
operator.apply_layout(isa_circuit.layout) for operator in observables
]
# Reshape observable array for broadcasting
reshaped_ops = np.fromiter(isa_observables, dtype=object)
reshaped_ops = reshaped_ops.reshape((7, 1))
estimator = Estimator(backend)
job = estimator.run([(isa_circuit, reshaped_ops)])
result = job.result()[0]
exp_val = job.result()[0].data.evs
print(result)
# Since the result array is structured as a 2D array where each element is a
# list containing a single value, you need to flatten the array.
# Plot using Matplotlib
plt.bar(observables_labels, exp_val.flatten())
PubResult(data=DataBin(evs=np.ndarray(<shape=(7, 1), dtype=float64>), stds=np.ndarray(<shape=(7, 1), dtype=float64>), ensemble_standard_error=np.ndarray(<shape=(7, 1), dtype=float64>), shape=(7, 1)), metadata={'shots': 4096, 'target_precision': 0.015625, 'circuit_metadata': {}, 'resilience': {}, 'num_randomizations': 32})
<BarContainer object of 7 artists>
Cell berikut menggunakan standard error yang diestimasi dari setiap hasil dan menambahkannya sebagai error bar. Lihat dokumentasi bar plot untuk deskripsi lengkap plot tersebut.
standard_error = job.result()[0].data.stds
_, ax = plt.subplots()
ax.bar(
observables_labels,
exp_val.flatten(),
yerr=standard_error.flatten(),
capsize=2,
)
ax.set_title("Expectation values (with standard errors)")
Text(0.5, 1.0, 'Expectation values (with standard errors)')