我正在使用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])
进行了一次谷歌搜索后,我发现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])
我的问题是,蓝线如何在水平网格线的上方,同时保持刻度线与第一张图片相同?
答案 0 :(得分:0)
由于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轴限制,它不会为您自动缩放。