Visualizar resultados
Versiones de paquetes
El código de esta página fue desarrollado usando los siguientes requisitos. Recomendamos usar estas versiones o más recientes.
qiskit[all]~=2.3.0
qiskit-ibm-runtime~=0.43.1
Graficar un histograma
La función plot_histogram visualiza el resultado de muestrear un circuito cuántico en una QPU.
Esta función devuelve un objeto matplotlib.Figure. Cuando la última línea de una celda de código genera estos objetos, los notebooks de Jupyter los muestran debajo de la celda. Si llamas a estas funciones en otros entornos o en scripts, necesitarás mostrar o guardar las salidas de forma explícita.
Dos opciones son:
- Llama a
.show()sobre el objeto devuelto para abrir la imagen en una nueva ventana (suponiendo que el backend de matplotlib que tienes configurado es interactivo). - Llama a
.savefig("out.png")para guardar la figura enout.pngen el directorio de trabajo actual. El métodosavefig()acepta una ruta, por lo que puedes ajustar la ubicación y el nombre del archivo donde guardas la salida. Por ejemplo,plot_state_city(psi).savefig("out.png").
Por ejemplo, crea un estado de Bell de dos qubits:
# 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())
Opciones al graficar un histograma
Usa las siguientes opciones de plot_histogram para ajustar el gráfico de salida.
legend: Proporciona una etiqueta para las ejecuciones. Acepta una lista de cadenas usadas para etiquetar los resultados de cada ejecución. Resulta especialmente útil cuando se grafican múltiples resultados de ejecución en el mismo histograma.sort: Ajusta el orden de las barras del histograma. Se puede establecer en orden ascendente conasco en orden descendente condesc.number_to_keep: Acepta un entero con el número de términos a mostrar. El resto se agrupa en una única barra llamada "rest".color: Ajusta el color de las barras; acepta una cadena o una lista de cadenas con los colores a usar para las barras de cada ejecución.bar_labels: Ajusta si se imprimen etiquetas encima de las barras.figsize: Acepta una tupla con el tamaño en pulgadas de la figura de salida.
# 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,
)
Graficar resultados del Estimator
Qiskit no dispone de una función integrada para graficar los resultados del Estimator, pero puedes usar el gráfico bar de Matplotlib para una visualización rápida.
Para demostrarlo, la siguiente celda estima los valores esperados de siete observables distintos sobre un estado cuántico.
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>
La siguiente celda usa el error estándar estimado de cada resultado y los añade como barras de error. Consulta la documentación del gráfico bar para obtener una descripción completa del gráfico.
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)')