Pular para o conteúdo principal

Visualizar resultados

Versões dos pacotes

O código nesta página foi desenvolvido usando os seguintes requisitos. Recomendamos o uso dessas versões ou versões mais recentes.

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

Plotar histograma

A função plot_histogram visualiza o resultado da amostragem de um circuito quântico em um QPU.

Usando a saída das funções

Essa função retorna um objeto matplotlib.Figure. Quando a última linha de uma célula de código retorna esses objetos, os notebooks Jupyter os exibem abaixo da célula. Se você chamar essas funções em outros ambientes ou em scripts, será necessário exibir ou salvar as saídas explicitamente.

Duas opções são:

  • Chame .show() no objeto retornado para abrir a imagem em uma nova janela (supondo que o backend matplotlib configurado seja interativo).
  • Chame .savefig("out.png") para salvar a figura em out.png no diretório de trabalho atual. O método savefig() aceita um caminho, então você pode ajustar o local e o nome do arquivo onde está salvando a saída. Por exemplo, plot_state_city(psi).savefig("out.png").

Por exemplo, crie um estado de Bell de dois 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())

Output of the previous code cell

Opções ao plotar um histograma

Use as seguintes opções do plot_histogram para ajustar o gráfico de saída.

  • legend: Fornece um rótulo para as execuções. Recebe uma lista de strings usadas para rotular os resultados de cada execução. Isso é mais útil ao plotar múltiplos resultados de execução no mesmo histograma
  • sort: Ajusta a ordem das barras no histograma. Pode ser definido como ordem crescente com asc ou ordem decrescente com desc
  • number_to_keep: Recebe um inteiro com o número de termos a exibir. Os demais são agrupados em uma única barra chamada "rest"
  • color: Ajusta a cor das barras; recebe uma string ou uma lista de strings com as cores a usar nas barras de cada execução
  • bar_labels: Ajusta se os rótulos são impressos acima das barras
  • figsize: Recebe uma tupla com o tamanho em polegadas para a figura de saída
# 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

Plotar resultados do Estimator

O Qiskit não possui uma função nativa para plotar resultados do Estimator, mas você pode usar o gráfico bar do Matplotlib para uma visualização rápida.

Para demonstrar, a célula a seguir estima os valores esperados de sete observáveis diferentes em um estado quâ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>

Output of the previous code cell

A célula a seguir usa o erro padrão estimado de cada resultado e os adiciona como barras de erro. Consulte a documentação do gráfico bar para uma descrição completa do 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)')

Output of the previous code cell