【问题标题】:How to plot a line plot over sns.heatmap over the center of tick labels如何在刻度标签中心的 sns.heatmap 上绘制线图
【发布时间】:2021-11-20 07:47:31
【问题描述】:

目前,我正在尝试在所有状态概率上绘制维特比路径。基本上,它是 Seaborn 热图上的线图,我正在使用以下代码

fig = plt.figure(figsize=(10, 10))
ax = sns.heatmap(plot.T, cmap="viridis")
ax.set_title("State probabilities")
ax.set_xlabel("Time step")
ax.set_ylabel("Hidden states")
plt.plot(viterbi_path, color='red')
plt.show()

我得到这样的东西:

而线从中心开始,没有过渡,而是像这张图片中的实际值

我怎样才能做到这一点?

感谢您的帮助:)

用于实验的基本可重现玩具代码

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

uniform_data = np.random.rand(10, 15)
ax = sns.heatmap(uniform_data)
t = np.arange(10)
t = [0, 0, 1, 1, 2, 3, 4,4,4,4,5,6,7,8,9]
plt.plot(t)
plt.show()

【问题讨论】:

    标签: python matplotlib seaborn data-science data-visualization


    【解决方案1】:

    Seaborn 在半个位置 (0.5, 1.5, ...) 绘制刻度。您可以添加一半以使线条位于 y 方向的中心。

    import numpy as np
    import seaborn as sns
    import matplotlib.pyplot as plt
    
    uniform_data = np.random.rand(10, 15)
    ax = sns.heatmap(uniform_data)
    t = [0, 0, 1, 1, 2, 3, 4, 4, 4, 4, 5, 6, 7, 8, 9]
    plt.plot(np.array(t) + 0.5, color='lime', lw=3)
    plt.show()
    

    您也可以这样做以在 x 方向上居中:

    plt.plot(np.arange(len(t)) + 0.5, np.array(t) + 0.5, color='lime', lw=3)
    

    【讨论】:

    • 谢谢!这就是我一直在寻找的,只是为了补充有没有办法逐步进行过渡而不是这个斜率?
    • Matplotlib 有一个阶梯函数。 plt.step(...)
    • 谢谢!完成了这项工作,添加了plt.step(..., where='mid')
    猜你喜欢
    • 1970-01-01
    • 2014-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-30
    • 2012-06-10
    相关资源
    最近更新 更多