簡體   English   中英

通過Seaborn雙重繪制X軸

[英]Dual Plotting X-Axis via 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)和效率%,以了解性能之間的關系以及其后的性能下降。

我唯一想到的另一種方法是將多項式函數編寫為要放入繪圖函數的自變量中的方程式,然后將其繪制出來。 我還沒有嘗試過,但是想過要問一下在我走這條路之前是否還有其他選擇。

感謝您的時間。

散點圖

解決方案:對於感興趣的人,我將.twinx()庫與regplot一起使用,如下所示。

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.

讓我嘗試重述該問題:您有兩個數據集,它們具有共同的獨立值,但具有不同的依存值(分別為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()

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM