[英]How do I get a simple scatter plot of a dataframe (preferrably with seaborn)
我正在嘗試分散以下數據框:
mydf = pd.DataFrame({'x':[1,2,3,4,5,6,7,8,9],
'y':[9,8,7,6,5,4,3,2,1],
'z':np.random.randint(0,9, 9)},
index=["12:00", "1:00", "2:00", "3:00", "4:00",
"5:00", "6:00", "7:00", "8:00"])
x y z
12:00 1 9 1
1:00 2 8 1
2:00 3 7 7
3:00 4 6 7
4:00 5 5 4
5:00 6 4 2
6:00 7 3 2
7:00 8 2 8
8:00 9 1 8
我希望將時間“12:00,1:00,...”視為x,y,z
軸上的x軸和x,y,z
列。
當我嘗試通過mydf.plot(kind="scatter")
用pandas繪圖時,我得到錯誤ValueError: scatter requires and x and y column
。 我是否必須將我的數據框分解為適當的參數? 我真正想做的是用seaborn繪制這個散點圖。
剛剛跑步
mydf.plot(style=".")
對我來說很好:
Seaborn實際上是圍繞pandas.DataFrame
的。 但是,您的數據框需要“整潔” :
由於你想在同一個圖上繪制x,y和z,看起來它們實際上是不同的觀察結果 。 因此,您確實有三個變量:時間,值和使用的字母。
“整潔”標准來自Hadly Wickham,他在tidyr包中實施了它 。
首先,我將索引轉換為Datetime:
mydf.index = pd.DatetimeIndex(mydf.index)
然后我們轉換為整潔的數據:
pivoted = mydf.unstack().reset_index()
並重命名列
pivoted = pivoted.rename(columns={"level_0": "letter", "level_1": "time", 0: "value"})
現在,這就是我們的數據:
letter time value
0 x 2019-03-13 12:00:00 1
1 x 2019-03-13 01:00:00 2
2 x 2019-03-13 02:00:00 3
3 x 2019-03-13 03:00:00 4
4 x 2019-03-13 04:00:00 5
不幸的是,seaborn不能很好地使用DateTimes,所以你可以將小時提取為整數:
pivoted["hour"] = pivoted["time"].dt.hour
使用這種形式的數據框,seaborn可以輕松地獲取數據:
import seaborn as sns
sns.set()
sns.scatterplot(data=pivoted, x="hour", y="value", hue="letter")
輸出:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.