class_docstr: A composed plot to compare two confusion matrices
code: def plot(self, ax=None):
      if ax is None:
          _, ax = plt.subplots()
  
      _matrix.add(self.a, self.b, ax, invert_axis=True)
  
      tick_marks = np.arange(len(self.target_names))
      ax.set_xticks(tick_marks)
      ax.set_xticklabels(self.target_names)
      ax.set_yticks(tick_marks)
      ax.set_yticklabels(self.target_names)
  
      title = "Confusion matrix (compare)"
      ax.set_title(title)
  
      ax.set_ylabel("True label")
      ax.set_xlabel("Predicted label")
  
      return ax
  
imports: import json
  from pathlib import Path
  import numpy
  import matplotlib.pyplot
  from sklearn.metrics import confusion_matrix
  from sklearn_evaluation import __version__
  from ..telemetry import SKLearnEvaluationLogger
  from ..plot.matplotlib import bar
  from ..metrics import precision_at
  from ..None import compute
  from ..util import is_column_vector, is_row_vector, default_heatmap
  from sklearn_evaluation.plot.plot import AbstractPlot, AbstractComposedPlot
  from ..plot import _matrix
  from ploomber_core.exceptions import modify_exceptions
label_desc: Use image node_id 2 for calling the ConfusionMatrixAdd obj's underlying member method code with example usage: obj.plot(ax) and returns: ax