Wizualizacja wyników
Wersje pakietów
Kod na tej stronie został opracowany przy użyciu poniższych wymagań. Zalecamy korzystanie z tych lub nowszych wersji.
qiskit[all]~=2.3.0
qiskit-ibm-runtime~=0.43.1
Rysowanie histogramu
Funkcja plot_histogram wizualizuje wynik próbkowania obwodu kwantowego na QPU.
Ta funkcja zwraca obiekt matplotlib.Figure. Gdy ostatnia linia komórki kodu zwraca takie obiekty, notebooki Jupyter wyświetlają je poniżej komórki. Jeśli wywołujesz te funkcje w innych środowiskach lub w skryptach, musisz jawnie wyświetlić lub zapisać wyniki.
Dwie opcje to:
- Wywołaj
.show()na zwróconym obiekcie, aby otworzyć obraz w nowym oknie (zakładając, że skonfigurowany backend matplotlib jest interaktywny). - Wywołaj
.savefig("out.png"), aby zapisać rysunek do plikuout.pngw bieżącym katalogu roboczym. Metodasavefig()przyjmuje ścieżkę, więc możesz dostosować lokalizację i nazwę pliku wyjściowego. Na przykład:plot_state_city(psi).savefig("out.png").
Na przykład utwórz dwuqubitowy stan Bella:
# 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())
Opcje rysowania histogramu
Użyj poniższych opcji funkcji plot_histogram, aby dostosować wykres wyjściowy.
legend: Udostępnia etykietę dla wykonań. Przyjmuje listę ciągów znaków używanych do oznaczania wyników każdego wykonania. Jest to przydatne głównie przy rysowaniu wielu wyników wykonania na tym samym histogramie.sort: Dostosowuje kolejność słupków na histogramie. Można ustawić na rosnący (asc) lub malejący (desc).number_to_keep: Przyjmuje liczbę całkowitą określającą liczbę terminów do wyświetlenia. Pozostałe są grupowane w jeden słupek o nazwie „rest".color: Dostosowuje kolor słupków; przyjmuje ciąg znaków lub listę ciągów znaków określających kolory słupków dla każdego wykonania.bar_labels: Dostosowuje, czy etykiety są drukowane nad słupkami.figsize: Przyjmuje krotkę z rozmiarami w calach dla wynikowego rysunku.
# 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,
)
Rysowanie wyników Estimator-a
Qiskit nie ma wbudowanej funkcji do rysowania wyników Estimator-a, ale możesz użyć wykresu bar z Matplotlib do szybkiej wizualizacji.
Aby to zademonstrować, poniższa komórka szacuje wartości oczekiwane siedmiu różnych obserwowalnych na stanie kwantowym.
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>
Poniższa komórka używa szacowanego błędu standardowego każdego wyniku i dodaje go jako słupki błędów. Pełny opis wykresu znajdziesz w dokumentacji wykresu bar.
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)')