好的
我花了很多时间试图使图形上的椭圆正确地定向,最终我得到了正确的答案,但是编码对我来说意义不大……让我对输出进行详尽的解释。
这里是绘制轮廓图的解决方案...
def plot(data, xvar, yvar, zvar):
piv = data.pivot(xvar, yvar, zvar)
x = piv.columns.values
y = piv.index.values
X, Y = np.meshgrid(x,y)
Z = piv.values
plt.contourf(Y,X,Z, levels=50, alpha=3/4, cmap=plt.cm.jet)
plt.title(r"$C(\theta_1, \theta_2) = \sum_{i=1}^{20}[f(t_i)-\theta_1 t_i - \theta_2 t_i^2]^2$")
plt.xlabel(r"$\theta_1$")
plt.ylabel(r"$\theta_2$")
数据透视表的docs说,第一个参数是索引(x-var),第二个参数用于任何列(y-var),然后传递的第三个参数是数据透视表的值表(z-var)。
好的
为什么x = piv.columns.values
是?我们将要显示在y轴上的结果分配给x轴,然后将x轴显示给y轴...这很奇怪...
当我们绘制轮廓线然后做(Y,X,Z)时,这似乎又违反了(X,Y,Z)约定。确实,docs表示应该相反。
根据我的直觉思考,这就是制作正确图的原因
def plot(data, xvar, yvar, zvar):
piv = data.pivot(xvar, yvar, zvar)
x = piv.index.values
y = piv.columns.values
X, Y = np.meshgrid(x,y)
Z = piv.values
plt.contourf(X,Y,Z, levels=50, alpha=3/4, cmap=plt.cm.jet)
plt.title(r"$C(\theta_1, \theta_2) = \sum_{i=1}^{20}[f(t_i)-\theta_1 t_i - \theta_2 t_i^2]^2$")
plt.xlabel(r"$\theta_1$")
plt.ylabel(r"$\theta_2$")
这是第一个绘制的正确图形...
这是第二张图制作的不正确的图...
什么是了解正在发生的事情的直观方式?