Repository: Qiskit/qiskit

Issue:
Some state visualizations have illegible parts when using a non-default matplotlib style
<!-- ⚠️ 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.14.0
- **Python version**: 3.8.2
- **Operating system**: Manjaro

### What is the current behavior?

Some state visualizations are illegible when using a non-default matplotlib style.

### Steps to reproduce the problem

In Jupyter:
```python
import matplotlib.pyplot as plt
plt.style.use("dark_background")
```

Then run the example code in [`plot_state_qsphere`'s documentation](https://qiskit.org/documentation/stubs/qiskit.visualization.plot_state_qsphere.html).

![image](https://user-images.githubusercontent.com/11418203/88247905-4c70c700-cc54-11ea-8204-4a8293a3218f.png)

Some other ["Counts and State Visualizations"](https://qiskit.org/documentation/apidoc/visualization.html#counts-and-state-visualizations) functions are affected. Testing with their example code produces the following issues:

* `plot_bloch_vector`: x, y, \ket{0}, \ket{1} labels invisible
* `plot_bloch_multivector`: same as `plot_bloch_vector`
* `plot_state_qsphere`: sphere is invisible; the word "Phase" in the center of the phase legend is invisible

Note that in testing these, you will want to configure Jupyter to use a dark page background (as otherwise white text may be printed on Jupyter's default white background). JupyterLab's dark theme is one possible option.

### What is the expected behavior?

Colors should dynamically change based on the current style.

### Suggested solutions

Change colors dynamically based on the current style.



Discussion:
Related: #3277
If no one else has picked this up, can I to work this out?

Resolving patch:
diff --git a/qiskit/visualization/bloch.py b/qiskit/visualization/bloch.py
--- a/qiskit/visualization/bloch.py
+++ b/qiskit/visualization/bloch.py
@@ -175,7 +175,7 @@ def __init__(self, fig=None, axes=None, view=None, figsize=None,
         self.zlpos = [1.2, -1.2]
         # ---font options---
         # Color of fonts, default = 'black'
-        self.font_color = 'black'
+        self.font_color = plt.rcParams['axes.labelcolor']
         # Size of fonts, default = 20
         self.font_size = 20
 
diff --git a/qiskit/visualization/state_visualization.py b/qiskit/visualization/state_visualization.py
--- a/qiskit/visualization/state_visualization.py
+++ b/qiskit/visualization/state_visualization.py
@@ -724,8 +724,8 @@ def plot_state_qsphere(state, figsize=None, ax=None, show_state_labels=True,
     x = np.outer(np.cos(u), np.sin(v))
     y = np.outer(np.sin(u), np.sin(v))
     z = np.outer(np.ones(np.size(u)), np.cos(v))
-    ax.plot_surface(x, y, z, rstride=1, cstride=1, color='k',
-                    alpha=0.05, linewidth=0)
+    ax.plot_surface(x, y, z, rstride=1, cstride=1, color=plt.rcParams['grid.color'],
+                    alpha=0.2, linewidth=0)
 
     # Get rid of the panes
     ax.w_xaxis.set_pane_color((1.0, 1.0, 1.0, 0.0))
@@ -829,7 +829,7 @@ def plot_state_qsphere(state, figsize=None, ax=None, show_state_labels=True,
 
     ax2 = fig.add_subplot(gs[2:, 2:])
     ax2.pie(theta, colors=sns.color_palette("hls", n), radius=0.75)
-    ax2.add_artist(Circle((0, 0), 0.5, color='white', zorder=1))
+    ax2.add_artist(Circle((0, 0), 0.5, color=plt.rcParams['figure.facecolor'], zorder=1))
     offset = 0.95  # since radius of sphere is one.
 
     if use_degrees:


Test patch: