【问题标题】:Tick labels at regular intervals定期打勾标签
【发布时间】:2020-07-24 08:56:50
【问题描述】:

我想复制下面的热图,我已经很接近了。我是 python 新手,我没有正确理解坐标轴和颜色。

def fun(C_1, C_2):
    return np.multiply(C_1, C_2)

C_1 = np.linspace(-2,2,100)
C_2 = np.linspace(-2,2,100)

# filling the heatmap, value by value
fun_map = np.empty((C_1.size, C_2.size))
for i in range(C_1.size):
    for j in range(C_2.size):
        fun_map[i,j] = fun(C_1[i], C_2[j])

sns.heatmap(fun_map)

这会产生以下情节。我不知道如何正确设置轴,即 C_1C_2 而不是索引。

另外,我如何只显示0.5 步骤,即-2, -1.5, etc.

任何帮助将不胜感激。

【问题讨论】:

    标签: python matplotlib seaborn heatmap


    【解决方案1】:

    要在两个轴上设置刻度,您可以使用set 并指定xticklabelsyticklabels。但是,为了使数字刻度标签定期出现,我们需要在标签序列上做一些工作。这是一种方法:

    def show_at_intervals(seq, interval, decimals=1):
        x = np.copy(seq)
        low, high = x.min(), x.max()
        ar = np.arange(low,high,interval)
        replate_at = np.searchsorted(x, ar)
        new_ticks = np.full(x.shape, '', dtype=f'U{4+decimals}')
        new_ticks[replate_at] = x[replate_at].round(decimals)
        return new_ticks
    

    然后只需在两个轴上指定我们想要的序列和新的间隔(注意,可以使用np.multiply.outer直接获得外积):

    g = sns.heatmap(np.multiply.outer(C_1, C_2), 
                    xticklabels=True, yticklabels=True)
    _ = g.set(xticklabels = show_at_intervals(C_1, 0.5),
              yticklabels = show_at_intervals(C_1, 0.5))
    

    或者例如对于x-axis 上的.5y-axis 上的0.2 的间距:

    g = sns.heatmap(np.multiply.outer(C_1, C_2))
    _ = g.set(xticklabels = show_at_intervals(C_1, .5),
              yticklabels = show_at_intervals(C_2, 0.2))
    

    【讨论】:

    • 后续问题,如何只显示0.5步,即-2、-1.5等?
    猜你喜欢
    • 2013-03-12
    • 2021-07-05
    • 1970-01-01
    • 2017-12-10
    • 1970-01-01
    • 2014-07-13
    • 2019-12-21
    • 1970-01-01
    • 2015-01-06
    相关资源
    最近更新 更多