首页 > 解决方案 > 如何使用 python 更改热图上的轴?

问题描述

我正在尝试绘制具有不同 A 值的热图。轴显示的迭代次数为 0 到 30,而不是 A 的值应该在 0 到 5 之间。

import numpy as np
from math import e
import matplotlib.pyplot as plt
from ipywidgets import interactive   
%matplotlib inline


def ricker(A, x):
    return x * e**(A * (1 - x))


import seaborn as sns

A1 = np.linspace(0,5,30)
A2 = np.linspace(0,5,30)

def F(A1,A2):

     A1,A2 = np.meshgrid(A1,A2)
     Lyap = 0
     x = 0.5
     for i in range(0,5000):
          if i % 2==0:
              A = A2
          else:
              A = A1

          Lyap = Lyap + np.log(abs((1-A*x)*e**(A - A*x)))
          x = ricker(A, x)
      Lyap = Lyap/5000
      return Lyap
 z = F(A1,A2)
 plt.figure(figsize=(16, 16))
 ax = sns.heatmap(z)
 ax.invert_yaxis()

标签: pythonnumpy

解决方案


您必须指定 x/y 刻度标签,例如

ax = sns.heatmap(z, xticklabels=A1, yticklabels=A2)

结果很丑

生标签

如果你格式化一下,你可以做得更好

xlabels = ['{:3.1f}'.format(x) for x in A1]
ylabels = ['{:3.1f}'.format(y) for y in A2]
ax = sns.heatmap(z, xticklabels=xlabels, yticklabels=ylabels)

更好的字符串

但您也可以使用更少的刻度标签

ax = sns.heatmap(z, xticklabels=A1, yticklabels=A2)
ax.set_xticks(ax.get_xticks()[::3])
ax.set_xticklabels(xlabels[::3])
ax.set_yticks(ax.get_yticks()[::3])
ax.set_yticklabels(ylabels[::3])

一些标签


推荐阅读