gpt4 book ai didi

python - Seaborn:来自数据上方次轴的网格线(具有不同的刻度)

转载 作者:行者123 更新时间:2023-12-03 20:26:32 25 4
gpt4 key购买 nike

我正在使用 seaborn 和 twinx 在一个图中绘制两条线。然而,如下图所示,蓝线位于水平线下方,因为它被第二个图覆盖:

import seaborn as sns
import matplotlib.pyplot as plt
l1 = sns.lineplot(x=[0,1,2],y=[1,2,3],color="#0188A8")
ax1 = plt.gca()
ax2 = ax1.twinx()
l2 = sns.lineplot(x=[0,1,2], y=[100,200,300],color="#D42227")
plt.xlabel('Number of Selves',fontsize=13)
ax1.set_xticks([0,1,2])
ax1.set_yticks([0,1,2])
ax2.set_yticks([100,200,300])

enter image description here

谷歌搜索后,我找到了 this这很接近,但没有帮助。尝试他们的解决方案时,轴刻度会变形,因为两条线都绘制在第二个图上:

ax1 = plt.gca()
ax2 = ax1.twinx()
l1 = sns.lineplot(x=[0,1,2],y=[1,2,3],color="#0188A8")
l2 = sns.lineplot(x=[0,1,2], y=[100,200,300],color="#D42227")
plt.xlabel('Number of Selves',fontsize=13)
ax1.set_xticks([0,1,2])
ax1.set_yticks([0,1,2])
ax2.set_yticks([100,200,300])

enter image description here

我的问题是,蓝线如何位于水平网格线之上,同时保持刻度与第一张图片中的位置相同?

最佳答案

因为ax2的所有艺术家,您无法轻松获得所需的效果。绘制在 ax1 的艺术家之上,无论它们各自的 z 顺序如何。

正如您所发现的,我可以建议的唯一“好”解决方案是,在 ax2 上画两条线。 , 但你必须使用 ax1 的数据转换第一行,使其与左轴上的数字匹配。

fig = plt.figure()
ax1 = fig.add_subplot(111)
ax2 = ax1.twinx()

l1 = sns.lineplot(x=[0,1,2],y=[1,2,3],color="#0188A8", ax=ax2, transform=ax1.transData)
l2 = sns.lineplot(x=[0,1,2], y=[100,200,300],color="#D42227", ax=ax2)

ax1.set_xlabel('Number of Selves',fontsize=13)
ax1.set_xticks([0,1,2])
ax1.set_yticks([0,1,2])
ax2.set_yticks([100,200,300])
ax1.set_ylim(-0.5,3.5)

注意,因为ax1上其实没有数据,您必须手动指定 y 轴限制,它不会为您自动缩放。

enter image description here

关于python - Seaborn:来自数据上方次轴的网格线(具有不同的刻度),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54301276/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com