Вы можете просто раскрасить столбцы после факта.
import numpy as np
import matplotlib.pyplot as plt
x = np.random.normal(-20, 15, 5000)
_, _, bars = plt.hist(x, bins = 100, color="C0")
for bar in bars:
if bar.get_x() > 0:
bar.set_facecolor("C1")
plt.xlabel("Relative Error [%]")
plt.ylabel("#samples")
plt.axvline(x=0, linestyle='--',linewidth=1, color='grey')
plt.show()
Если вместо этого вы хотите построить гистограмму гистограммированных значений(как предлагает другой ответ), это будет выглядеть как
import numpy as np
import matplotlib.pyplot as plt
x = np.random.normal(-20, 15, 5000)
hist, edges = np.histogram(x, bins=100)
colors = np.array(["C0", "C1"])[(edges[:-1] > 0).astype(int)]
plt.bar(edges[:-1], hist, width=np.diff(edges), align="edge", color=colors)
plt.xlabel("Relative Error [%]")
plt.ylabel("#samples")
plt.axvline(x=0, linestyle='--',linewidth=1, color='grey')
plt.show()