Repository: Qiskit/qiskit

Issue:
Inconsistent coloring in controlled Hadamard 
<!-- ⚠️ If you do not respect this template, your issue will be closed -->
<!-- ⚠️ Make sure to browse the opened and closed issues -->

### Information

- **Qiskit Terra version**: 0.12.0
- **Python version**: 3.7.6
- **Operating system**: MacOS Catalina 10.15.3

### What is the current behavior?

When drawing  a circuit containing a controlled Hadamard gate (output='mpl'), the coloring it displays is blue for the box and purple for the control line.

### Steps to reproduce the problem

Draw a circuit containing a controlled Hadamard gate.

### What is the expected behavior?

Consistent coloring. 

### Suggested solutions

I would suggest using blue everywhere so that it is consistent with two qubit control gates such as CNOT.



Discussion:

Resolving patch:
diff --git a/qiskit/visualization/matplotlib.py b/qiskit/visualization/matplotlib.py
--- a/qiskit/visualization/matplotlib.py
+++ b/qiskit/visualization/matplotlib.py
@@ -841,7 +841,7 @@ def _draw_ops(self, verbose=False):
                     self._custom_multiqubit_gate(q_xy, wide=_iswide,
                                                  text="Unitary")
                 elif isinstance(op.op, ControlledGate) and op.name not in [
-                        'ccx', 'cx', 'cz', 'cu1', 'cu3', 'crz',
+                        'ccx', 'cx', 'cy', 'cz', 'ch', 'cu1', 'cu3', 'crz',
                         'cswap']:
                     disp = op.op.base_gate.name
                     num_ctrl_qubits = op.op.num_ctrl_qubits
@@ -856,10 +856,12 @@ def _draw_ops(self, verbose=False):
                         self._ctrl_qubit(q_xy[i+1], fc=self._style.dispcol['multi'],
                                          ec=self._style.dispcol['multi'])
                     elif num_qargs == 1:
-                        self._gate(q_xy[-1], wide=_iswide, text=disp)
+                        self._gate(q_xy[-1], wide=_iswide, fc=self._style.dispcol['multi'],
+                                   text=disp)
                     else:
                         self._custom_multiqubit_gate(
-                            q_xy[num_ctrl_qubits:], wide=_iswide, text=disp)
+                            q_xy[num_ctrl_qubits:], wide=_iswide, fc=self._style.dispcol['multi'],
+                            text=disp)
 
                 #
                 # draw single qubit gates
@@ -899,7 +901,7 @@ def _draw_ops(self, verbose=False):
                     elif op.name == 'cz':
                         disp = op.name.replace('c', '')
                         if self._style.name != 'bw':
-                            color = self._style.dispcol['multi']
+                            color = self._style.dispcol['cz']
                             self._ctrl_qubit(q_xy[0],
                                              fc=color,
                                              ec=color)
@@ -912,7 +914,7 @@ def _draw_ops(self, verbose=False):
                         # add qubit-qubit wiring
                         if self._style.name != 'bw':
                             self._line(qreg_b, qreg_t,
-                                       lc=self._style.dispcol['multi'])
+                                       lc=color)
                         else:
                             self._line(qreg_b, qreg_t, zorder=PORDER_LINE + 1)
                     # control gate
@@ -921,7 +923,10 @@ def _draw_ops(self, verbose=False):
 
                         color = None
                         if self._style.name != 'bw':
-                            color = self._style.dispcol['multi']
+                            if op.name == 'cy':
+                                color = self._style.dispcol['cy']
+                            else:
+                                color = self._style.dispcol['multi']
 
                         self._ctrl_qubit(q_xy[0], fc=color, ec=color)
                         if param:
@@ -959,6 +964,12 @@ def _draw_ops(self, verbose=False):
                         self._swap(q_xy[1])
                         # add qubit-qubit wiring
                         self._line(qreg_b, qreg_t, lc=self._style.dispcol['swap'])
+
+                    # dcx and iswap gate
+                    elif op.name in ['dcx', 'iswap']:
+                        self._custom_multiqubit_gate(q_xy, c_xy, wide=_iswide,
+                                                     fc=self._style.dispcol[op.name], text=op.name)
+
                     # Custom gate
                     else:
                         self._custom_multiqubit_gate(q_xy, c_xy, wide=_iswide,
diff --git a/qiskit/visualization/qcstyle.py b/qiskit/visualization/qcstyle.py
--- a/qiskit/visualization/qcstyle.py
+++ b/qiskit/visualization/qcstyle.py
@@ -77,8 +77,13 @@ def __init__(self):
             'z': pauli_color,
             'h': clifford_color,
             'cx': clifford_color,
+            'cy': clifford_color,
+            'cz': clifford_color,
+            'swap': clifford_color,
             's': clifford_color,
             'sdg': clifford_color,
+            'dcx': clifford_color,
+            'iswap': clifford_color,
             't': other_color,
             'tdg': other_color,
             'r': other_color,
@@ -87,7 +92,6 @@ def __init__(self):
             'rz': other_color,
             'reset': non_gate_color,
             'target': '#ffffff',
-            'swap': other_color,
             'multi': other_color,
             'meas': non_gate_color
         }


Test patch: