Все зависит от того, знаете-ли вы формулу вашей ф-ции (квази)плотности распределения. Надеюсь, что у=F(r) известна, и соответственно, известна и функция Ф(y)=r, обратная к ней. Тогда не надо изобретать велосипед, все придумано до нас.
Например:
stratum.ac.ru/education/textbooks/modelir/lection2...
На пальцах:
Генерируете равномерно распределенное число в диапазоне от (по вашему рисунку) 0 до 100%. Получаете точку y на оси Y. Потом считаете r=Ф(y).Последовательность таких точек {r} будут генерироваться случайным образом, в строгом соответствии с вашим законом распределения.
Не просто "чаще"-"реже", и именно в соответствии с вашим законом.
Так поступают всегда и все. Реализация на Python - в три строчки.