我有一個包含兩列(time_id 和 param1)的資料框。對于第 2 列(param1),我想根據時間創建一個箱線圖。
但是我想把它分成三個(或 n 個)部分。這意味著箱線圖中不僅有一個框,而且每個時間范圍有一個框。例如(n=3)一個基于值20,3,4,21,19 [time 1-3]的框和一個基于8,9,18,6,4 [time 4-6]的框等等。
所以下面的代碼創建了整個列的箱線圖。
import pandas as pd
# initialize data of lists.
data = {'time_id':[1,1,2,3,3,4,5,5,5,6,7,8,8,9],
'param1':[20,3,4,21,19,8,9,18,6,4,2,3,7,1]}
# Create DataFrame
df = pd.DataFrame(data)
boxplot = df.boxplot(column='param1')
將列分成三個框以便箱線圖看起來像這樣的優雅方法是什么(示例):
![一列中的幾個框 [Boxplot]](https://img.uj5u.com/2021/12/29/875fefd9875a4d93a7af290f4f0a7dec.png)
uj5u.com熱心網友回復:
由于您的時間序列或多或少間隔均勻,我也將使用![一列中的幾個框 [Boxplot]](https://img.uj5u.com/2021/12/29/e858cbb0f09848869749cb27a76f8d56.png)
在實際示例中,您的時間序列可能包含浮點數,而不是整數。這些浮點數可能相當長,使得標簽也相當長。在這種情況下,您可以將其輸出縮寫為 ,
bin_labels = ['time {mini:.2} : {maxi:.2}'.for....但這不適用于整數陣列。
uj5u.com熱心網友回復:
我不確定這是最優雅的方法,但您可以使用cut()pandas的函式和 dataframe 的方法.pivot():
df["class"]=pd.cut(df['time_id'], bins=3, labels=False)
df = df.drop("time_id", axis=1).pivot(columns="class")
boxplot = df.boxplot()
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/396826.html
標籤:Python 熊猫 matplotlib
下一篇:物理學中的高斯曲線擬合
