【问题标题】:matplotlib pcolor axes scalematplotlib pcolor 坐标轴比例
【发布时间】:2015-01-20 22:25:57
【问题描述】:

我使用 pcolor 绘制了热图:

df = df.groupby(['d','f'])['beta'].sum()
beta_df = df.unstack('f')
plt.pcolor(beta_df)

beta_df 的大小为 35x35,因此开始:

f             0.05      0.06      0.07      0.08      0.09      0.10  ...
d                                                                      
0.050000  0.993125  0.993264  0.991511  0.995148  1.000422  1.003847   
0.105714  0.997931  0.998003  0.997459  1.000743  1.005858  1.001873 
...

但是,坐标轴包含从 0 到 35 的整数,而不是 f 和 d 的值。如何解决?

【问题讨论】:

    标签: arrays matplotlib pandas heatmap


    【解决方案1】:

    首先,建议您使用pcolormesh,而不是pcolor(更快更灵活)。您需要告诉pcolormesh 您的数据的 x 和 y 范围是什么。这是通过使用 x 和 y 值的数组调用它来完成的。假设你的二维数组被称为c,你可以这样做:

    plt.pcolormesh(x, y, c)
    

    其中x 是一个包含 x 值的数组,y 是一个包含 y 值的数组。您需要确保xy 的尺寸与c 的形状匹配。

    【讨论】:

      【解决方案2】:

      我发现这是唯一的保持比例的轴校正方法:

          tick_spacing = 10
          plt.yticks(np.arange(0, len(df.index), tick_spacing), df.index[0::tick_spacing])
          plt.xticks(np.arange(0, len(df.columns), tick_spacing), df.columns[0::tick_spacing])   
      

      【讨论】:

        【解决方案3】:

        您可以使用plt.axis() 方法来设置坐标轴值。所以我认为你应该能够做类似的事情(如果我没记错我的熊猫):

        xmin = beta_df.index.min()
        xmax = beta_df.index.max()
        ymax = beta_df.max()
        ymin = beta_df.min()
        

        然后:

        plt.axis([xmin, xmax, ymin, ymax])
        

        或类似的东西。

        【讨论】:

        • 这行不通,因为pcolor 没有正确的范围。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-03
        • 2018-10-08
        • 1970-01-01
        • 2022-07-04
        相关资源
        最近更新 更多