You can do your interpolation in a spherical coordinate space, for example, using RectSphereBivariateSpline :
from scipy.interpolate import RectSphereBivariateSpline
This is the perfect solution. In particular, there will be some unsightly edge effects when φ 'flows around' from 2π to 0 (see Update below).

Update:
To answer the second question about the color bar: since I had to set the colors of each patch individually in order to get the “heat map” effect, and not just specify the array and color code, the usual methods for creating color drums won’t work. However, you can "fake" the color bar using the ColorbarBase class:
from matplotlib.colorbar import ColorbarBase, make_axes_gridspec

To “smooth the sphere”, you can simply plot the interpolated intensity values as a function of φ and Θ in a 2D heat map, for example using pcolormesh :
fig, ax = plt.subplots(1, 1) ax.hold(True)

You can understand why strange boundary problems arise here - there were no input points close enough to φ = 0 to capture the first phase of the oscillation along the φ axis, and interpolation does not “wrap” the intensity values from 2π to 0. In this case, a simple workaround there would be duplication of input points at φ = 2π for φ = 0 before performing the interpolation.
I'm not quite sure what you mean by “real-time rotation of the sphere” - you should do this already by clicking and dragging the 3D axes.
Update 2
Although your input does not contain negative voltages, this does not guarantee that the interpolated data will not. The spline fit is not limited to non-negative, and you can expect the interpolated values to "underestimate" the real data in some places:
print(volt.min()) # 0.0 print(d_itp.min()) # -0.0172434740677
I'm not sure I understand what you mean by
In addition, the values entered do not always correspond to the points, which should be their positions.
Here your data looks like a 2D map:

The colors of the scatter points (representing your initial voltage values) exactly match the interpolated values in the heatmap. Perhaps you mean the degree of "overshoot" / "overshot" in the interpolation? This is difficult to avoid given how few input points are in your dataset. One thing you can try is to play RectSphereBivariateSpline with the s parameter to RectSphereBivariateSpline . By setting this to a positive value, you can do smoothing, not interpolation, that is, you can reduce the restriction so that the interpolated values pass exactly through the input points. However, I quickly played around with this and couldn't get a nice result, probably because you have too few entry points.