Вы можете использовать np.histogram
:
import numpy as np
from matplotlib import pyplot as plt
fig, ax = plt.subplots()
chisq = np.random.chisquare(3, 1000)
norm = np.random.normal(10, 4, 1000)
chisq_counts, chisq_bins = np.histogram(chisq, 50)
norm_counts, norm_bins = np.histogram(norm, 50)
ax.plot(chisq_bins[:-1], chisq_counts)
ax.plot(norm_bins[:-1], norm_counts)
plt.show()
В конкретном случае ваших данных, которые имеют выбросы, нам нужно обрезать их перед построением графика:
clipped_df1 = np.clip(df1, 0, 100)
clipped_df2 = np.clip(df2, 0, 100)
# continue plotting
