如何使用 Seaborn 强制对 X 轴值进行排序?

How to force order on X-axis values with Seaborn?

我正在绘制从数据帧加载的某些模型的性能。我正在使用 Seaborn 进行此操作。但是,X 轴上值的顺序取决于选择模型的顺序。例如,在下图中,首先选择模型 PLD_level_6,然后选择模型 PLD_level_5.3:

enter image description here

如您所见,X轴上的值首先从v17开始到v19,然后从v13开始到v16。当然,人们希望 X 轴上的值按时间顺序排列(即从 v13 到 v19)。如果先选择模型 PLD_level_5.3 然后选择模型 PLD_level_6,情况确实如此,如下所示:

enter image description here

发生这种情况的原因是 PLD_level_6 w.r.t 没有数据。 v13、v14、v15 和 v16。有没有办法在 X 轴上强制 v13、v14、v15、v16、v17、v18、v19 的固定顺序而不依赖于缺失数据?

这是我用于绘图的代码片段:

    if (number_of_metrics ==1):
        g = sns.lineplot(x="VERSION", y=metrics1[0], hue="FULL_MODEL_ID", data = v_model_results, ax=axes[0, 0])
        box = g.get_position()
        g.set_position([box.x0, box.y0, box.width * 0.85, box.height])
        g.legend(loc='lower right', bbox_to_anchor=(0.8, 1.2), ncol=1)
    if (number_of_metrics > 1):
        g = sns.lineplot(x="VERSION", y=metrics1[0], hue="FULL_MODEL_ID", data = v_model_results, ax=axes[0, 0])
        box = g.get_position()
        g.set_position([box.x0, box.y0, box.width * 0.85, box.height])
        g.legend(loc='lower right', bbox_to_anchor=(0.8, 1.5), ncol=1)
        for metric in metrics1[1:]:
            index = metrics1.index(metric)
            sns.lineplot(x="VERSION", y=metric, hue="FULL_MODEL_ID", data = v_model_results, ax=axes[index, 0], legend=False)
        axes[0,0].set_title(f"First set of models: {cell_line1}-{conc1}")
        plt.tight_layout()

是的,给你的 x 变量一个 Categorical dtype,其中包含你希望按你希望的顺序出现的所有类别。