Хорошо, давайте начнем с загрузки ваших данных
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
df = pd.read_csv('/home/b2003864/t.csv', header=0)
Далее достаточно просто получить желаемые точки разброса, используя ax.scatter
fig, ax = plt.subplots(1, 1)
# Plot positive values in red (C3)
ax.scatter(np.argwhere(df['real'] > 0), df.loc[df['real'] > 0, 'real'], color='C3', edgecolors='k')
# Plot negative values in blue (C0)
ax.scatter(np.argwhere(df['real'] < 0), df.loc[df['real'] < 0, 'real'], color='C0', edgecolors='k')
# Plot neutral value in grey (C7)
ax.scatter(np.argwhere(df['real'] == 0), df.loc[df['real'] == 0, 'real'], color='C7', edgecolors='k')
Наконец, мы можем использовать ax.fill_between
, чтобы построить заштрихованные области, как вы хотели:
ax.fill_between([-5, 35], -0.002, 0, color='C0', zorder=-1, alpha=0.7)
ax.fill_between([-5, 35], 0, 0.002, color='C3', zorder=-1, alpha=0.7)
ax.set_ylim([-0.00015, 0.00015])
ax.set_xlim([-5, 35])
Все это вместе дало мне:
