如何在保持y值范围的同时合并两个Seaborn线图图形?

时间:2018-10-25 06:00:13

标签: python matplotlib seaborn

我想将两个具有不同范围的图形组合起来,例如图形

Figure One

此图是通过绘制两个图而合成的。但是,我想立即使用Seaborn库。但现在它显示为

Figure Two

如何通过使用seaborn或任何其他python绘图库来组合不同的y范围图形?

我也添加了我的python代码

import seaborn as sns
import numpy as np
with sns.axes_style('white'):
     ax = sns.lineplot(x='unit_step', y='accuracy', hue='data_type', style='data_type', markers=True, dashes=True, data=data)
     ax.set_xticks(np.arange(1,6))

1 个答案:

答案 0 :(得分:2)

据我所知,您的问题是关于如何将两个范围非常不同的数据集绘制到一个子图中的请求,这里有些提示您如何实现。

tl; dr:最后,您只需要将 plt.twinx() 放在具有次要y轴的plt.plot()命令之前。

首先假定两个函数,在相同的定义范围内,它们的值范围非常不同,f(x) = x³f(x) = sin(x)

x = np.linspace(-2*np.pi, 2*np.pi, 100)
y1 = x**3
y2 = np.sin(x)

可以这样绘制:

fig, axs= plt.subplots(1, 2, figsize=(12, 6))

axs[0].plot(x, y1, 'b', x, y2, 'r')
axs[0].set_xlabel('X')
axs[0].set_ylabel('Y')

axs[1].plot(x, y1, 'b')
axs[1].set_xlabel('X')
axs[1].set_ylabel('Y1')

axs_sec = axs[1].twinx()        # <--- create secondary y-axis
axs_sec.plot(x, y2, 'r')
axs_sec.set_ylabel('Y2')

enter image description here

在左侧,可以看到,如果在同一y轴上绘制,则正弦几乎不可见。 在右侧,正弦绘制在次要y轴上,因此可以得到自己的缩放比例。