【问题标题】:Create group and show sum on pyplot创建组并在 pyplot 上显示总和
【发布时间】:2021-01-31 14:45:06
【问题描述】:

示例代码

import seaborn as sns
import matplotlib
import matplotlib.pyplot as plt
import numpy as np

dayOfMonth = np.random.randint(low =1, high =32, size=(50))
dayOfWeek = np.random.randint(low =1, high =6, size=(50))
dayOfWork = np.random.randint(low =1, high =22, size=(50))
minute = np.random.randint(low =1, high =61, size=(50))

data = {'DayOfWeek' : dayOfWeek,
        'DayOfWork' : dayOfWork,
        'Minute' : minute}

df = pd.DataFrame (data)

sns.set_style("whitegrid");

sns.FacetGrid(df, hue="DayOfWeek", height=10) \
   .map(plt.scatter, "DayOfWork","Minute") \
   .add_legend();
plt.xticks(range(0,22,1))
plt.yticks(range(0,61,10))

plt.show();

当前情节。

预期情节。

这种期望是可能的吗? 我是这个领域的新手,请见谅。

【问题讨论】:

    标签: python pandas numpy matplotlib seaborn


    【解决方案1】:
    import pandas as pd
    import seaborn as sns
    import matplotlib
    import matplotlib.pyplot as plt
    import numpy as np
    
    def get_start_end_point(df, x_range, cluster_size):
        start_x = 0
        start_y = 0
        end_x = -1
        end_y = -1
        x_points = []
        y_points = []
        x_group = []
        y_group = []
        groups_sum = []
        group_sum = 0
        for i in x_range:
            temp = df[df['DayOfWork'] == i]
            if i%cluster_size == 1:
                x_group.append(i)
                y_group.append(0)
            if len(temp) != 0:
                group_sum +=temp['Minute'].sum()
                x_group.append(i)
                y_group.append(temp['Minute'].iloc[-1])
            if (i%cluster_size == 0 or i == x_range.stop) and i !=0:
                x_group.append(i)
                y_group.append(0)
                x_points.append(x_group.copy())
                y_points.append(y_group.copy())
                groups_sum.append(group_sum)
                x_group.clear()
                y_group.clear()
                group_sum = 0
                
        return x_points, y_points, groups_sum
    
    dayOfWeek = np.random.randint(low =1, high =6, size=(50))
    dayOfWork = np.random.randint(low =1, high =22, size=(50))
    minute = np.random.randint(low =1, high =61, size=(50))
    
    data = {'DayOfWeek' : dayOfWeek,
            'DayOfWork' : dayOfWork,
            'Minute' : minute}
    
    df = pd.DataFrame(data)
    
    x_points,y_points, groups_sum = get_start_end_point(df.sort_values(["DayOfWork", "Minute"]).reset_index(drop=True),range(0,22),3)
    
    sns.set_style("whitegrid");
    
    fig, ax = plt.subplots(figsize=(10, 10))
    ax.set_xticks(range(0,22,1))
    ax.set_yticks(range(0,61,10))
    
    for i in range(0, len(x_points)):
        ax.plot(x_points[i], y_points[i],'b--',lw = 1)
        ax.fill_between(x_points[i], y_points[i], color='#c9eaff') 
    
    sns_plot = sns.FacetGrid(df, hue="DayOfWeek", height=10)
    sns_plot.map(ax.scatter, "DayOfWork","Minute")
    sns_plot.add_legend()
    

    在此之后,我也可以创建组并更改背景颜色。
    但是当我尝试显示情节时,它显示在两个子情节中。它的标签、X 轴和 Y 轴名称显示在第二个图中。
    另外我有分组的总和,如何显示在分组的顶部?

    【讨论】:

      猜你喜欢
      • 2018-04-17
      • 1970-01-01
      • 2023-04-09
      • 2021-02-23
      • 1970-01-01
      • 2010-11-05
      • 2018-08-19
      • 2022-08-22
      • 1970-01-01
      相关资源
      最近更新 更多