наложение морского дна на груду груды - PullRequest
0 голосов
/ 06 мая 2020

У меня есть следующий набор данных:

loads_ts_comb.head()
    rte_nbr date    perc_op_capacity    is_overworked
0   35  2019-07-01  52.828054   NaN
1   35  2019-07-02  91.515837   NaN
2   35  2019-07-03  96.380090   NaN
3   35  2019-07-04  96.040724   NaN
4   35  2019-07-05  73.642534   NaN


loads_ts_comb.dtypes
rte_nbr                      int64
date                datetime64[ns]
val1                       float64
val2                       float64

is_overworked flag принимает значения 0/1 / NaN.

Используя seaborn, я хочу создать тепловую карту для perc_op_capacity ( с rte_nbr как ось x и date как ось y). Затем я хочу наложить диаграмму рассеяния для is_overworked на тепловую карту (снова используя rte_nbr как ось x и date как ось y). Я пробовал сделать это:

## combine df
loads_ts_comb = loads_ts_comb.loc[(loads_ts_comb.date >= '2019-07-01') & (loads_ts_comb.date <= '2019-07-31')]

## get df for scatter plot
df_ts = loads_ts_comb.drop(columns='perc_op_capacity')
df_ts.sort_values(by=['rte_nbr','date'], ascending=[True, False], inplace=True)
df_ts = df_ts.reset_index().drop(columns='index')

## get df for heatmap
df_loads = loads_ts_comb.drop(columns='is_overworked')
df_loads.sort_values(by=['rte_nbr','date'], inplace=True)
df_loads_piv = df_loads.pivot(index="date", columns="rte_nbr")
df_loads_piv.index = df_loads_piv.index.date
df_loads_piv.columns = [col[1] for col in df_loads_piv.columns.values]

## plotting
fig, ax = plt.subplots(figsize=(20,10))
ax = sns.heatmap(df_loads_piv, ax = ax, robust=True, square=True, center=90, cmap='coolwarm',
            cbar_kws={"shrink":.3, "label": "% operating capacity"})
ax = sns.stripplot(x="rte_nbr", y="date", hue='is_overworked', palette="Set3", size=10, data=df_ts, ax=ax)
ax.set_title('Percentage operating capacity by Route (x) and Date(y)', fontsize=16, fontdict={})
plt.xticks(fontsize="10")

plt.xlabel(xlabel='Route', fontsize=14)
plt.ylabel(ylabel='Date', fontsize=14)

#set labelsize of the colorbar
cbar = ax.collections[0].colorbar
cbar.ax.tick_params(labelsize=10)

plt.show()

Я перепробовал кучу вещей, но не могу заставить стрипплот наложиться на тепловую карту. Моя текущая тепловая карта выглядит так:

enter image description here

...