Repository: Qiskit/qiskit

Issue:
plot_bloch_vector (and others) no longer directly importable from qiskit.tools.visualization
<!-- ⚠️ If you do not respect this template, your issue will be closed -->
<!-- ⚠️ Make sure to browse the opened and closed issues -->

### Informations

- **Qiskit Terra version**: 0.5.7
- **Python version**: 3.6.5
- **Operating system**: Windows 7

### What is the current behavior?
The command **from qiskit.tools.visualization import plot_bloch_vector** no longer works now that this function is defined in the file _state_visualization.py in the visualization folder, rather than in the file visualization.py. Perhaps this is intentional, but in that case then the file qiskit/python/quantum_phase_bloch.py in the repository ibmqx-user-guides should be updated accordingly.


### Steps to reproduce the problem
1. Start python
2. Run **from qiskit.tools.visualization import plot_bloch_vector**
3. Observe error message


### What is the expected behavior?
1. I expect it to import the function and not give an error message.


### Suggested solutions
1. Add ", plot_bloch_vector" (and possibly other functions) to the end of line 12 in qiskit.tools.visualization.\_\_init\_\_.py.
2. Alternatively, change line 5 of qiskit/python/quantum_phase_bloch.py in the ibmqx-user-guides repository to read "from qiskit.tools.visualization._state_visualization import plot_bloch_vector"



Discussion:
Nice catch @dtmcclure ! I'm actually unsure about the best solution: perhaps the best way is to update the [`ibmqx-user-guides` file](https://github.com/Qiskit/ibmqx-user-guides/blob/master/qiskit/python/quantum_phase_bloch.py#L5), but instead of modifying the import for pointing to the specific function (as technically modules with an underscore are "private"), make the file use `plot_state(rho, method='bloch')` instead?

The reason would be that `plot_state` acts as a "dispatcher" function of sorts - any other state visualization can be invoked through it ... and it seems nor the tutorials or the user guides are using any other function defined in `_state_visualization`. I'm unsure if this was by convention, though: probably a question for the tutorials/user guides?
We want the plot_bloch_vector as a function. 
This was done to give users one unified interface for plotting density matrices:
```
plot_state(rho, method)
```
where `method` can be "bloch", "city", "qsphere" or "paulivec". The idea is that these all plot the same thing, in different ways. 

So I would also vote for keeping that the "public" interface, and the underlying methods as private.
yeah, I agree but the point is you can plot a Bloch sphere with much less information than a state as it is not informationally complete. I am fine with the others not being accessed unless using state but this one I think should be special. I can't believe i'm defending the Bloch sphere when I think this is the worst thing physicists ever got used to helping explain quantum computing.

The plot_state method should only use rho but the plot_vector uses the smaller vector format. The reason is also when using it for education i dont want to make a rho when we dont need to. 

Resolving patch:
diff --git a/qiskit/tools/visualization/__init__.py b/qiskit/tools/visualization/__init__.py
--- a/qiskit/tools/visualization/__init__.py
+++ b/qiskit/tools/visualization/__init__.py
@@ -11,6 +11,7 @@
 
 from ._circuit_visualization import circuit_drawer, plot_circuit, generate_latex_source,\
     latex_circuit_drawer, matplotlib_circuit_drawer, qx_color_scheme
+from ._state_visualization import plot_bloch_vector
 from ._counts_visualization import plot_histogram
 
 if ('ipykernel' in sys.modules) and ('spyder' not in sys.modules):


Test patch: