了解从熊猫绘制数据透视表的方法

时间:2020-10-16 04:21:16

标签: python pandas numpy matplotlib

好的

我花了很多时间试图使图形上的椭圆正确地定向,最终我得到了正确的答案,但是编码对我来说意义不大……让我对输出进行详尽的解释。

这里是绘制轮廓图的解决方案...

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)。

好的

  1. 为什么x = piv.columns.values是?我们将要显示在y轴上的结果分配给x轴,然后将x轴显示给y轴...这很奇怪...

  2. 当我们绘制轮廓线然后做(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$")

这是第一个绘制的正确图形...

enter image description here

这是第二张图制作的不正确的图...

enter image description here

什么是了解正在发生的事情的直观方式?

0 个答案:

没有答案