# Contour graph shows negative values (strange) for the height

When hovering over the contour graph, I got a negative value for the height. However the height is actually the cost function so it will always be positive. Here's the screenshot: Clearly I can see the scales for the height are all positive for 3 plots, but the z value is not always. Could anyone help to explain why this happened?

Just for your reference, here's the code I used to plot:

import matplotlib.pyplot as plt
plt.style.use('seaborn-white')
import numpy as np
import math

def pred_fn(w, x):
return np.matmul(x, w)

def cost_fn(w, Y):
Y_hat = pred_fn( w, X )
return np.sum( ( Y_hat - Y ) ** 2 )

# **Warning:** Don't use broadcast operator, it's very complicated.
# W = np.hstack((W1.reshape(-1, 1),W2.reshape(-1, 1))).reshape(w2.size, w1.size, 2)
def compute_cost(w1, w2, Y, J):
for i, w2_v in enumerate(w2):
for j, w1_v in enumerate(w1):
J[i, j] = cost_fn(np.array( [w1_v, w2_v] ), Y)
return J

ax = fig.add_subplot(row_index, col, col_index, projection='3d')
W1, W2 = np.meshgrid(w1, w2)
J = np.zeros((w2.size, w1.size))
ax.plot_surface(W1, W2, compute_cost(w1, w2, Y, J), rstride=1, cstride=1,
cmap='viridis', edgecolor='none')
ax.set_title('%d.%d' %(row_index, col_index));

# -------
fig = plt.figure()
col = 3

# 1st
x1 = np.linspace(-10, 10, 20)
x2 = np.linspace(-500, 1000, 20)
X = np.hstack((x1.reshape(-1, 1), x2.reshape(-1, 1)))
Y = 3*x1 + 3*x2
w1 = np.linspace(0, 16, 20)
w2 = np.linspace(-30, 28, 30)

x1 = np.linspace(-1, 1, 20)
x2 = np.linspace(-1, 1, 20)
X = np.hstack((x1.reshape(-1, 1), x2.reshape(-1, 1)))
Y = 3*x1 + 3*x2
w1 = np.linspace(2.5, 3.5, 100)
w2 = np.linspace(2.5, 3.5, 100)