我有一個這樣的資料框
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.DataFrame({'A': [1,2,3,4,5,4,3,2,1],
'B': [200,300,400,800,1500,900,450,275,200],
'c': ['up','up','down','up','up','down','down','up','down'],
'd': ['r','r','r','r','r','r','r','r','r'],
})
當我使用 seaborn 用代碼繪制線圖時sns.lineplot(data=df, x='A', y='B',ci=None)。我得到如下圖。

如您所見,這些點尚未完全繪制。當我使用下面的代碼進行繪圖時
upDF = df.loc[df['c']=='up']
downDF = df.loc[df['c']=='down']
sns.lineplot(data=upDF, x='A', y='B',ci=None, label = 'up');
sns.lineplot(data=downDF, x='A', y='B',ci=None, label = 'down');
plt.legend()
我得到如下圖

在該圖中,所有點都被繪制,但它們是“斷開的”。我怎樣才能得到一個像下面這樣的圖,連接點并且只有一個圖例(列“D”或常數可用于圖例)

如果我使用sns.lineplot我的實際資料,我會得到如下圖,而不是up&down單獨繪制。

uj5u.com熱心網友回復:
您可以使用純 matplotlib。選擇 up 之后的行作為 up 系列的一部分,以確保連接點。對于圖例,添加以要跳過的下劃線開頭的標簽:
import matplotlib.pyplot as plt
m = df['c']=='up'
upDF = df.loc[m|m.shift()]
downDF = df.loc[~m]
ax = plt.subplot()
upDF.plot(x='A', y='B', label='r', ax=ax)
downDF.plot(x='A', y='B', label='_skip', ax=ax)
ax.legend()
輸出:

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/486601.html
標籤:Python 熊猫 matplotlib
