簡體   English   中英

如何獲得數據幀的簡單散點圖(最好使用seaborn)

[英]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的。 但是,您的數據框需要“整潔”

  1. 每個變量形成一列。
  2. 每個觀察形成一排。
  3. 每種類型的觀察單位形成一個表格。

由於你想在同一個圖上繪制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.

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