【问题标题】:How Can I Set The Range Of the X and Y Axis For A Heatmap?如何设置热图的 X 轴和 Y 轴范围?
【发布时间】:2019-06-26 17:29:45
【问题描述】:

我正在尝试为 x 和 y 设置轴,但每次尝试时,热图都会缩小到绘图的一角。我试试

plt.xlim(0, 60)
plt.ylim(0, 30)

我也试过了:

ax.set_ylim(0, 30)
ax.set_xlim(0, 60)

但这做同样的事情。

这就是我到目前为止所称的热图:

pivot = df.pivot_table(index = 'Test X', columns = 'Test Y', values = 'Data')
ax = sns.heatmap(pivot, annot = True, fmt = .2g, cmap = 'Blues_r')

我希望 X 轴从 0 到 60 并显示范围,无论数据是否达到 60,并且与 y 到 30 相同。 但这不起作用。

【问题讨论】:

  • 设置限制是没有用的,因为数据本身就在 0 和 N 之间,其中 N 是数组的行数/列数。您可以决定是否要更改刻度标签,或者是否要使用一些 matplotlib 函数,如 imshowpcolormesh,它们会服从一些实际的数据坐标。
  • @ImportanceOfBeingErnest 我正在使用 seaborn,所以我不确定如何使用不同的调用将其合并到其中。我做了另一个编辑并添加了更多代码来提供帮助。
  • 如果要使用seaborn,可以自定义坐标轴的刻度位置和刻度标签。但是您不必使用 seaborn,对吗?因此,您可以使用 pcolormesh,而不是 sns.heatmap(z, ...),您可以使用 plt.pcolormesh(x,y,z),其中 x 和 y 是您希望像素定位的坐标向量。
  • @ImportanceOfBeingErnest 如果我使用 seaborn,更改标签就足够了吗?或者它只是改变刻度的名称。我认为它实际上不会对轴产生影响。
  • 是的,它不会改变轴;这才是重点。如果要使用 seaborn,则不能更改轴,因为第 N 个像素的坐标为 N-1。所以剩下的就是保持轴原样,但伪造标签以读取您希望它们读取的内容。

标签: python seaborn heatmap axis


【解决方案1】:

通过使用

df = pd.DataFrame(np.random.random((15,15)))
sns.heatmap(df)
ax=plt.gca()
ax.set_xlim(0, 60)

我能够得到所需限制的数字

此外,ax=sns.heatmap(df); ax.set_xlim(0, 60) 的行为方式相同。也许是你打电话给ax.set_xlim 的方式。希望对你有帮助

【讨论】:

    猜你喜欢
    • 2012-09-06
    • 2011-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-02
    • 1970-01-01
    • 2018-10-09
    • 2019-09-06
    相关资源
    最近更新 更多