我有一個大約有 100 列的大資料框,我試圖在一張圖中繪制所有時間序列。有沒有一種簡單的方法來處理它,而無需手動指定每個 y 軸?
這將是一個簡單的例子,這些時間序列:02K W,03K W,和04K W:
import pandas as pd
import matplotlib.pyplot as plt
df1 = pd.DataFrame({
'Date':['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04', '2021-01-05'],
'index':[0, 1, 2, 3, 4],
'02K W':[3.5, 0.1, 3, 'nan', 0.2],
'03K W':[4.2, 5.2, 2.5, 3.0, 0.6],
'04K W':[1.5, 2.6, 8.2, 4.2, 5.3]})
df1['Date'] = pd.to_datetime(df1['Date'])
df1 = df1.set_index('index')
到目前為止,我手動指定了所有 y 軸來繪制單個時間序列。
plt.plot(df1['Date'], df1['02K W'])
plt.plot(df1['Date'], df1['03K W'])
plt.plot(df1['Date'], df1['04K W'])
有沒有更優雅的方法來指定繪圖的相關列?
uj5u.com熱心網友回復:
import pandas as pd
import matplotlib.pyplot as plt
df1 = pd.DataFrame({
'Date':['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04', '2021-01-05'],
'index':[0, 1, 2, 3, 4],
'02K W':[3.5, 0.1, 3, 'nan', 0.2],
'03K W':[4.2, 5.2, 2.5, 3.0, 0.6],
'04K W':[1.5, 2.6, 8.2, 4.2, 5.3]})
df1['Date'] = pd.to_datetime(df1['Date'])
df1 = df1.set_index('index')
for col in df1.colums[1:]:
plt.plot(df1['Date'], df1[col])
uj5u.com熱心網友回復:
您可以melt使用列并使用seaborn.lineplot:
import seaborn as sns
sns.lineplot(data=df1.replace('nan', float('nan')).melt(id_vars=['Date']),
x='Date', y='value', hue='variable'
)
輸出:

uj5u.com熱心網友回復:
有沒有更優雅的方法來指定繪圖的相關列?... [我正在嘗試] 繪制除索引和日期列之外的所有內容。
設定Date為索引,將覆寫當前index索引。這將保留除indexand之外的所有列Date,因此您可以使用DataFrame.plot:
df1.set_index('Date').plot()
或者正如Quang 評論的那樣,使用x='Date':
df1.plot(x='Date')
請注意,您'nan'的示例資料中有一個字串。如果這在您的真實資料中是正確的,您應該將它們轉換為真實的np.nan,例如,使用pd.to_numeric或DataFrame.replace。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/350087.html
標籤:Python 熊猫 数据框 matplotlib
上一篇:用回圈生成幾個子圖
