清理X轴,因为数据点太多

问题描述

我有一个像这样的数据集

Date      Time        Cash
1/1/20    12:00pm     2
1/1/20    12:02pm     15
1/1/20    12:03pm     20 
1/1/20    15:06pm     30
2/1/20    11:28am     5
 .         .          
 .         .          
 .         .          
3/1/20    15:00pm     3

我基本上将所有数据按y轴上的日期和x轴上的时间分组,并绘制了一个facetgrid,如下所示:

df_new= df[:300]

g = sns.FacetGrid(df_new.groupby(['Date','Time']).Cash.sum().reset_index(),col="Date",col_wrap=3)
g = g.map(plt.plot,"Time","Cash",marker=".")
g.set_xticklabels(rotation=45)

我回来的是可怕的(如下所示)。所以我想知道是否有一些整理X轴的方法?也许喜欢5-10个时间数据标签,以便可以看到时间,或者可以扩展图像?

enter image description here

编辑:我正在使用seaborn密谋。我希望它看起来像这样,其中x轴只有几个标签

enter image description here

感谢您的投入。

解决方法

您是否尝试过使用移动平均值而不是实际数据?您可以使用以下功能来计算任何数据的移动平均值:

def moving_average(a,n=10) :
    ret = np.cumsum(a,dtype=float)
    ret[n:] = ret[n:] - ret[:-n]
    return ret[n - 1:] / n

n设置为需要的平均值,您可以使用该值。 a是您的变量Cash,表示为numpy数组。

此后,将Cash列设置为真实值的移动平均值计数并将其绘制出来。绘图曲线会更平滑。

P.S。您在编辑中添加的自杀图确实难以理解,因为y轴的范围远高于所需范围。在实践中,请尽量避免此类情节。

修改 我没有注意到您最初是如何汇总数据的,您可能希望合并日期和时间。我不知道从哪里加载数据,以防您从csv加载数据,可以将其添加到read_csv方法:parse_dates=[['Date','Time']]中。如果没有,您可以使用数据框:

df['datetime'] = pd.to_datetime(df['Date'] + ' ' + df['Time'])

您使用日期时间创建一个新列,并且可以简单地使用它。