Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按条件筛选并在python中绘制批处理图_Python_Datetime_For Loop_Matplotlib_Plot - Fatal编程技术网

按条件筛选并在python中绘制批处理图

按条件筛选并在python中绘制批处理图,python,datetime,for-loop,matplotlib,plot,Python,Datetime,For Loop,Matplotlib,Plot,我有一个数据集df,如下所示: id timestamp data group_id 99 265 2019-11-28 15:44:34.027 22.5 1 100 266 2019-11-28 15:44:34.027 23.5 2 101 267 2019-11-28 15:44:34.027 27.5 3 102 273 2019-11-28 15:44:38.653 22.5

我有一个数据集
df
,如下所示:

    id         timestamp        data     group_id
99  265 2019-11-28 15:44:34.027  22.5         1
100 266 2019-11-28 15:44:34.027  23.5         2
101 267 2019-11-28 15:44:34.027  27.5         3
102 273 2019-11-28 15:44:38.653  22.5         1
104 275 2019-11-28 15:44:38.653  22.5         2
我用下面的代码为一组数据绘制了一个图表,这些数据按特定的组id和日期分组,例如组id==3,日期=2020-01-01

df['timestamp'] = pd.to_datetime(df['timestamp'])

GROUP_ID = 2
df = df[df['group_id'] == GROUP_ID]

df['Date'] = [datetime.datetime.date(d) for d in df['timestamp']] 
df = df[df['Date'] == pd.to_datetime('2020-01-01')]      

df.plot(x='timestamp', y='data', figsize=(42, 16)) 
plt.axhline(y=40, color='r', linestyle='-')
plt.axhline(y=25, color='b', linestyle='-')

df['top_lim'] = 40
df['bottom_lim'] = 25

plt.fill_between(df['timestamp'], df['bottom_lim'], df['data'],
                where=(df['data'] >= df['bottom_lim'])&(df['data'] <= df['top_lim']),
                facecolor='orange', alpha=0.3)

mask = (df['data'] <= df['top_lim'])&(df['data'] >= df['bottom_lim'])
plt.scatter(df['timestamp'][mask], df['data'][mask], marker='.', color='black')

cumulated_time = df['timestamp'][mask].diff().sum()
plt.gcf().subplots_adjust(left = 0.3)

plt.xlabel('Timestamp')
plt.ylabel('Data')
plt.show()

df['timestamp']=pd.to_datetime(df['timestamp'])
组ID=2
df=df[df['group\u id']==group\u id]
df['Date']=[df['timestamp']中d的datetime.datetime.Date(d)]
df=df[df['Date']==pd.to_datetime('2020-01-01')]
绘图(x='timestamp',y='data',figsize=(42,16))
plt.axhline(y=40,color='r',linestyle='-')
plt.axhline(y=25,color='b',linestyle='-')
df['top_lim']=40
df['bottom_lim']=25
在(df['timestamp']、df['bottom\u lim']、df['data']之间填充,

其中=(df['data']>=df['bottom_lim'])和(df['data']使用for loop,您可以采用以下方法。假设每个组有两个日期,一个很好的绘图方法是有两列,行数等于组数

rows=len(groups) #set the desired number of rows
cols=2 #set the desired number of columns

fig, ax = plt.subplots(rows, cols, figsize=(13,8),sharex=False,sharey=False) # if you want to turn off sharing axis.
g=0 #to iterate over rows/cols
d=0 #to iterate over rows/cols
for group in groups:
    for date in dates:
        GROUP_ID = group
        df = df[df['group_id'] == GROUP_ID]
        df['Date'] = [datetime.datetime.date(d) for d in df['timestamp']] 
        df = df[df['Date'] == date]      
        df.plot(x='timestamp', y='data', figsize=(42, 16)) 
        ax[g][d].axhline(y=40, color='r', linestyle='-')
        ax[g][d].axhline(y=25, color='b', linestyle='-')
        df['top_lim'] = 40
        df['bottom_lim'] = 25
        ax[g][d].fill_between(df['timestamp'], df['bottom_lim'], df['data'],
                        where=(df['data'] >= df['bottom_lim'])&(df['data'] <= df['top_lim']),
                        facecolor='orange', alpha=0.3)
        mask = (df['data'] <= df['top_lim'])&(df['data'] >= df['bottom_lim'])
        ax[g][d].scatter(df['timestamp'][mask], df['data'][mask], marker='.', color='black')
        cumulated_time = df['timestamp'][mask].diff().sum()

        d=d+1
        if d==1:
            g=g
        else:
            g=g+1
            d=0


fig.text(0.5, -0.01, 'Timestamp', ha='center', va='center',fontsize=20)
fig.text(-0.01, 0.5, 'Data', ha='center', va='center', rotation='vertical',fontsize=20)
plt.subplots_adjust(left = 0.3)
rows=len(组)#设置所需的行数
cols=2#设置所需的列数
图,ax=plt.subplot(行、列、figsize=(13,8)、sharex=False、sharey=False)#如果要关闭共享轴。
g=0#迭代行/列
d=0#迭代行/列
对于组中的组:
对于日期中的日期:
组ID=组
df=df[df['group\u id']==group\u id]
df['Date']=[df['timestamp']中d的datetime.datetime.Date(d)]
df=df[df['Date']==Date]
绘图(x='timestamp',y='data',figsize=(42,16))
ax[g][d].axhline(y=40,color='r',linestyle='-')
ax[g][d].axhline(y=25,color='b',linestyle='-')
df['top_lim']=40
df['bottom_lim']=25
ax[g][d]。在(df['timestamp'],df['bottom\u lim'],df['data']之间填充,

其中=(df['data']>=df['bottom_lim'])和(df['data']感谢Sameersque的回答。代码或数据中没有
。您在问题中指出,您
希望为每个日期的每个组id绘制一个图
。是的。但是
行=len(组)
中的
指什么('group\u id')
?您可以设置groups=df['group\u id']。这取决于您的用例。您可能需要修改它以满足您的需要。好的。我是否也要在
中为日期中的日期定义
日期: