0

我想根据我的数据的一般范围限制 y 轴边界,避免尖峰但不删除它们。

我正在制作多组图表来比较两组数据。两组都包含一年多的数据,并已使用 pandas 读入数据框,并且每个月通过循环生成图表。其中一组有埋葬尖峰,导致 y 轴上的范围绘制得过大,导致图表不可读。设置固定边界 pyplot.ylim()无济于事,因为数据的一般范围(例如一个月内)因图表而异,并且应用硬限制会降低许多图表的可读性。

例如:一个月可能有数据通常不会高于 300,000,但有几个峰值超过 500,000(和低于 -500,000),但另一个月也可能有较大的峰值,但数据不会超过高于 150,000 的值。

我还尝试根据此答案nan设置太大而无法使用的值,但折线图中的中断太小而无法看到,并且出现尖峰的事实会丢失。df2 = df[df.y < 500000] = np.nan

有没有办法弄清楚数据的一般最大和最小范围是什么,以便可以合理地设置 y 轴限制?

4

1 回答 1

0

当我写这个问题时,我发生了一些事情,我通过复制数据框,删除非常大的值,然后检查剩余数据的最大值和最小值来解决它。

def check_min_max(selected, selected2):
    max_test = selected2.copy(deep=True)
    
    #remove very large values
    max_test[(max_test[measurements_col] > 500000) | (max_test[measurements_col] < -500000)] = np.nan
    
    #get new max and min y-values
    measurements_y_max = max_test[measurements_col].max()
    measurements_y_min = max_test[measurements_col].min()

    results_y_max = selected[results_col].max()
    results_y_min = selected[results_col].min()
    
    if measurements_y_max > results_y_max:
        y_max = measurements_y_max
    else:
        y_max = results_y_max
        
    if measurements_y_min > 0 or results_y_min > 0:
        y_min = 0 - (y_max * 0.01)
    elif measurements_y_min < results_y_min:
        y_min = measurements_y_min
    else:
        y_min = results_y_min
    
    return(y_min + (y_min * 0.05), y_max + (y_max * 0.05)) # add 5% to range for readability

我也知道在将数据帧传递给函数后不需要复制它。在将其移至函数之前,我最初将其作为代码的一部分编写并且尚未更改

于 2021-04-14T15:52:29.800 回答