Plot 3d surface from pandas data.
Other alternative is Bokeh interactive tool: http://visjs.org/examples/graph3d/playground/index.html
import numpy as np
import matplotlib.pyplot as plt
# data collection
data_f = data_i >> group_by(X.dow,X.month) >> summarize(mvisit=mean(X.visit))
# reshape data
data_f = data_f.pivot(index='dow', columns='month', values='mvisit')
# data preparation
x = data_f.columns
y = data_f.index
X, Y = np.meshgrid(x, y)
Z = data_f
# create objects
fig = plt.figure(figsize=(16,8))
ax = plt.axes(projection='3d')
# plot
ax.contour3D(X, Y, Z, 50,cmap='viridis', edgecolor='none')
# labels
ax.set_xlabel('month')
ax.set_ylabel('dow')
ax.set_zlabel('visit')
# point view
ax.view_init(60, 35)
# display
plt.show()