通过Seaborn双重绘制X轴

时间:2017-09-30 16:24:15

标签: python matplotlib plot regression seaborn

编辑:我已经对问题进行了重写,因为它不应该像现在这样清晰。 我有2个数据集(df3和df4,它们分别保存总磁头和效率的信息)和一个共同的自变量(流速)。 我希望在同一图表中绘制它们,但因变量具有不同的Y轴。我最初使用lmplot作为多项式顺序功能,但是这两个图都出现在一个窗口中是不成功的。我想帮助将散点图和回归图结合到一个图中,该图显示数据集之间的重叠。

我使用以下方法生成我的图表:

ax2.scatter(df3['Flow_Rate_(KG/S)'], df2['Efficiency_%'], color='pink')
ax2.scatter(df4['Flow_Rate_(KG/S)'], df4['Total Head'], color='teal')
plt.show()

对于相互绘制线条很重要的原因是为了监控泵的性能,我们需要同时具有泵的总扬程(M)和效率%来理解泵的关系和随后的退化。性能

我能想到的唯一另一种方法是将多项式函数作为方程式写入绘图函数中的参数并将它们绘制出来。我还没有尝试过这个,但我想在我走这条路之前我会问是否还有其他选择。

感谢您的时间。

Scatter Plot

解决方案:对于那些感兴趣的人,我使用带有regplot的.twinx()库,如下所示。

fig, ax = plt.subplots()
ax2 = ax.twinx() #This allows the common axes (flow rate) to be shared
sbn.regplot(x="Flow_Rate_(KG/S)", y="Total Head", data=df3, order=2, ax=ax)
sbn.regplot(x="Flow_Rate_(KG/S)", y="Efficiency_%", data=df4, order=2, 
ax=ax2)
ax2.set_ylim(0,1)#This is used to set the limit for efficiency. Without this being set, the curves do not line up.

1 个答案:

答案 0 :(得分:2)

让我尝试重新解释这个问题:你有两个具有共同独立值的数据集,但分别有不同的依赖值(f(x),g(x))。您希望在同一图表中绘制它们,但依赖值具有完全不同的范围。因此,您希望有两个不同的y轴,每个轴对应一个数据集。应将数据绘制为散点图,并为每个数据显示回归线;你更了解回归线而不是知道或计算回归曲线本身。因此,您尝试使用seaborn lmplot,但是您无法将两个数据集都放在同一个图表中。

如果以上是您要解决的问题,答案可能如下:

lmplot基本上将regplot绘制为轴网格。因为这里不需要轴网格,所以使用regplot可能更有意义。然后,您可以创建一个轴和一个双轴,并为每个轴绘制一个regplot。

import numpy as np; np.random.seed(42)
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

df1 = pd.DataFrame({"x": np.sort(np.random.rand(30)),
                    "f": np.sort(np.random.rayleigh(size=30))})
df2 = pd.DataFrame({"x": np.sort(np.random.rand(30)),
                    "g": 500-0.1*np.sort(np.random.rayleigh(20,size=30))**2})

fig, ax = plt.subplots()
ax2 = ax.twinx()
sns.regplot(x="x", y="f", data=df1, order=2, ax=ax)
sns.regplot(x="x", y="g", data=df2, order=2, ax=ax2)


ax2.legend(handles=[a.lines[0] for a in [ax,ax2]], 
           labels=["f", "g"])
plt.show()

enter image description here