Zum Hauptinhalt springen

Ergebnisse visualisieren

Paketversionen

Der Code auf dieser Seite wurde mit den folgenden Anforderungen entwickelt. Wir empfehlen, diese oder neuere Versionen zu verwenden.

qiskit[all]~=2.3.0
qiskit-ibm-runtime~=0.43.1

Histogramm plotten

Die Funktion plot_histogram visualisiert das Ergebnis der Stichprobennahme eines Quantum Circuit auf einem QPU.

Ausgaben von Funktionen verwenden

Diese Funktion gibt ein matplotlib.Figure-Objekt zurück. Wenn die letzte Zeile einer Code-Zelle solche Objekte ausgibt, zeigen Jupyter-Notebooks sie unterhalb der Zelle an. Wenn du diese Funktionen in anderen Umgebungen oder in Skripten aufrufst, musst du die Ausgaben explizit anzeigen oder speichern.

Zwei Möglichkeiten sind:

  • Rufe .show() auf dem zurückgegebenen Objekt auf, um das Bild in einem neuen Fenster zu öffnen (sofern dein konfiguriertes Matplotlib-Backend interaktiv ist).
  • Rufe .savefig("out.png") auf, um die Abbildung als out.png im aktuellen Arbeitsverzeichnis zu speichern. Die Methode savefig() akzeptiert einen Pfad, sodass du Speicherort und Dateiname anpassen kannst. Zum Beispiel: plot_state_city(psi).savefig("out.png").

Erstelle zum Beispiel einen zwei-Qubit Bell-Zustand:

# 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())

Output of the previous code cell

Optionen beim Plotten eines Histogramms

Verwende die folgenden Optionen für plot_histogram, um das Ausgabediagramm anzupassen.

  • legend: Gibt eine Beschriftung für die Ausführungen an. Es wird eine Liste von Zeichenketten übergeben, die die Ergebnisse jeder Ausführung beschriften. Dies ist vor allem nützlich, wenn mehrere Ausführungsergebnisse im selben Histogramm dargestellt werden
  • sort: Passt die Reihenfolge der Balken im Histogramm an. Es kann entweder auf aufsteigende Reihenfolge mit asc oder absteigende Reihenfolge mit desc gesetzt werden
  • number_to_keep: Nimmt eine ganze Zahl für die Anzahl der anzuzeigenden Terme. Die restlichen werden in einem einzelnen Balken namens „rest" zusammengefasst
  • color: Passt die Farbe der Balken an; nimmt eine Zeichenkette oder eine Liste von Zeichenketten für die Farben der Balken jeder Ausführung
  • bar_labels: Legt fest, ob Beschriftungen über den Balken angezeigt werden
  • figsize: Nimmt ein Tupel mit der Größe in Zoll für die Ausgabeabbildung
# 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,
)

Output of the previous code cell

Estimator-Ergebnisse plotten

Qiskit verfügt über keine integrierte Funktion zum Plotten von Estimator-Ergebnissen, aber du kannst Matplotlibs bar-Plot für eine schnelle Visualisierung verwenden.

Zur Veranschaulichung schätzt die folgende Zelle die Erwartungswerte von sieben verschiedenen Observablen auf einem Quantenzustand.

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>

Output of the previous code cell

Die folgende Zelle verwendet den geschätzten Standardfehler jedes Ergebnisses und fügt ihn als Fehlerbalken hinzu. Eine vollständige Beschreibung des Plots findest du in der bar-Plot-Dokumentation.

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)')

Output of the previous code cell