python - 带有 pandas 和 Jupyter notebook 的交互式箱线图

标签 python pandas matplotlib jupyter-notebook

我在 pandas DataFrame 中有数据,我想创建一个交互式箱线图,允许我选择天数,同时为“类别”列中每个类别的值绘制箱线图

到目前为止,这是我的代码/数据的样子:

import numpy as np
import pandas as pd

categories=('A','B','C')

data = {
            'days':      np.random.randint(120, size=100), 
            'category':  np.random.choice(categories, 100),
            'value':     100.0 * np.random.random_sample(100)
       }

df = pd.DataFrame(data)

print(df)

   category  days      value
0         A     4  77.383981
1         A    31  63.011934
2         A     5   1.165061
3         C    59  23.588979
4         A    57  14.906734
5         C   106  33.366634
6         A    29  90.658570
7         B    25  16.137490
8         A   118  34.526302
9         C    76   4.111797
10        A    11  30.195917
..      ...   ...        ...
90        A    64  37.529774
91        A    76   3.771360
92        C   112  93.948775
93        C    14  34.855189
94        B    64  83.106007
95        A    10  78.346319
96        B    86  66.645889
97        A    46  12.969012
98        C    29  57.925427
99        A    59  34.526146

[100 rows x 3 columns]

我想为每个类别(针对选定/指定的天数)创建一个值的箱线图,并沿 X 轴绘制不同的类别。

我如何使用 pandas(或 matplotlib)做到这一点?

最佳答案

您可以简单地按天数过滤数据框,然后绘制相应的箱线图。

numer_of_days = 42
df_filtered= df.loc[df['days'] < numer_of_days]  # use operators like ==, >=, <, etc.
df_filtered[["category", "value"]].boxplot( by="category", return_type='axes')

enter image description here


为了获得下拉字段,您可以使用 `ipywidgets.interact()` 函数,您可以向该函数提供一个绘制特定日期数据帧的函数。 (在下文中,我将天数限制为 12 天,这样下拉列表实际上对于从中选择一天是有意义的。)
import numpy as np
import pandas as pd
from ipywidgets import interact
%matplotlib notebook

categories=('A','B','C')

data = {
            'days':      np.random.randint(12, size=100), 
            'category':  np.random.choice(categories, 100),
            'value':     100.0 * np.random.random_sample(100)
       }

df = pd.DataFrame(data)

def select_days(number_of_days):
    df_filtered= df.loc[df['days'] == int(number_of_days)] 
    ax = df_filtered[["category", "value"]].boxplot( by="category", return_type='axes')
    ax["value"].set_title("Day " + number_of_days)
    print(df_filtered)
    
days = [str(day) for day in np.arange(12)]

interact(select_days, number_of_days=days)

enter image description here

关于python - 带有 pandas 和 Jupyter notebook 的交互式箱线图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41667397/

相关文章:

python - 将给定的 pandas 数据帧转换为另一个数据帧

python - 为什么运行 Flask 开发服务器会自行运行两次?

python - Pygame : Two layered scrolling background, 你能帮我吗?

python - 在 Pandas 的两列中的任何一列上合并表

python - 使用 Matplotlib 和 mpld3 在 Web 浏览器上生成多个图形

python - TypeError : object. __init__() 没有参数

python - Pandas 数据帧 : selection of multiple elements in several columns

machine-learning - 如何在 pandas python 中以特定顺序重新排序某些行

Python Pandas Matplotlib Plot 按单列中定义的类型值着色

matplotlib - 如何创建开始和结束在特定范围内的条形图