График с меньшим количеством маркеров, чем у точек данных (или лучший способ построения CDF?) [Matplotlib, или общая помощь в построении графиков]

Я строю кумулятивные функции распределения с большим количеством точек данных. Я строю несколько линий на одном графике, которые обозначены маркерами, так как они будут напечатаны в черно-белом варианте. То, что я хотел бы, чтобы маркеры были равномерно распределены в x-измерении. То, что я получаю, это один маркер на точку данных (и учитывая количество точек, они все перекрываются)

Я не уверен, что это мое понимание того, как правильно строить сюжет, или просто отсутствие понимания matplotlib. Я не могу найти параметр "частота маркера".

Простым решением для одной строки было бы взять каждое N-е значение из строки и использовать его как отдельную строку с linestyle = '', но я бы хотел, чтобы маркеры были выровнены по вертикали, а разные массивы x имели разные длины.

# in reality, many thousands of values
x_example = [ 567, 460, 66, 1034, 275, 26, 628, 99, 287, 157, 705, 421, 1093, \ 
     139, 204, 14, 240, 179, 94, 139, 645, 670, 47, 520, 891, 450, 56, 964,   \
     1728, 99, 277, 356, 1628, 745, 364, 88, 112, 810, 816, 523, 401, 89,     \ 
     278, 917, 370, 53, 39, 90, 853, 356 ] 
x = sort(x_example)
y = linspace(0,1,len(x))

ax = subplot(1,1,1)
plots[w] = ax.plot(x,y, marker='o')

2 ответа

Решение

Ты можешь сделать plot(x,y,marker='o',markevery=5) отмечать каждую пятую точку, но я не думаю, что есть какая-либо встроенная поддержка для установки отметок на четных интервалах. Вы можете выбрать x мест, где вы хотите метки, используйте, например, numpy.searchsorted чтобы определить, с какими точками данных находятся местоположения, а затем выполнить интерполяцию между соседними точками, чтобы найти координаты y.

«Markevery» может принимать разные типы ввода. Как сказано в документации: float определяет расстояние между маркерами как часть диагонали осей в пространстве экрана. Так, например, markevery=0.1 создаст 10 равноудаленных маркеров по оси x или markerevery=(0.1,0.1) создаст диагностически равноудаленные маркеры.

Другие вопросы по тегам