Я пытаюсь исправить, как Python отображает мои данные.
Сказать
x = [0,5,9,10,15]
а также
y = [0,1,2,3,4]
Тогда я бы сделал:
matplotlib.pyplot.plot(x,y)
matplotlib.pyplot.show()
и отметки по оси x нанесены с интервалами 5. Можно ли сделать так, чтобы интервалы показывали 1?
python
matplotlib
Дакс Фелиз
источник
источник
pyplot.locator_params(nbins=4)
Ответы:
Вы можете явно указать, где вы хотите поставить отметки
plt.xticks
:Например,
(
np.arange
наrange
всякий случай был использован вместо функции Pythonmin(x)
иmax(x)
являются плавающими вместо целых.)Функция
plt.plot
(илиax.plot
) автоматически устанавливает значения по умолчаниюx
иy
ограничения. Если вы хотите сохранить эти ограничения и просто изменить размер шага отметок, вы можете использовать,ax.get_xlim()
чтобы узнать, какие ограничения уже установлены Matplotlib.Средство форматирования тиков по умолчанию должно выполнять приличную работу, округляя значения тиков до разумного числа значащих цифр. Однако, если вы хотите иметь больше контроля над форматом, вы можете определить свой собственный форматер. Например,
Вот работающий пример:
источник
+1
in»plt.xticks(np.arange(min(x), max(x)+1, 1.0))
.np.arange(start, stop)
генерирует значения в полуоткрытом интервале[start, stop)
, включая,start
но исключаяstop
. Так что я использовал,max(x)+1
чтобы убедиться, чтоmax(x)
включено.plt.xticks(np.arange(min(dates), max(dates)+0.1,0.1)
? кажется, только строит годДругой подход заключается в установке локатора оси:
Есть несколько различных типов локатора в зависимости от ваших потребностей.
Вот полный пример:
источник
matplotlib.dates.AutoDateLocator()
base=1.0
самом деле означает / делает?Мне нравится это решение (из книги рецептов Matplotlib Plotting ):
Это решение дает вам возможность явно контролировать интервал между тиками с помощью заданного номера
ticker.MultipleLocater()
, позволяет автоматически определять лимиты и легко читается позже.источник
В случае, если кто-то заинтересован в общей однострочности, просто получите текущие тики и используйте их для установки новых тиков, выбирая каждый второй тик.
источник
ax.set_xticks([tick for tick in ax.get_xticks() if tick % 1 == 0])
Это немного хакерский, но, безусловно, самый чистый / легкий для понимания пример, который я нашел для этого. Это из ответа на SO здесь:
Самый простой способ скрыть каждую метку nth в цветовой панели matplotlib?
Затем вы можете зациклить надписи, устанавливая их видимыми или нет в зависимости от плотности, которую вы хотите.
edit: обратите внимание, что иногда matplotlib устанавливает метки ==
''
, поэтому может показаться, что метка отсутствует, хотя на самом деле она ничего не отображает. Чтобы убедиться, что вы просматриваете фактические видимые метки, вы можете попробовать:источник
ax.get_xticklabels()[1::2]
ярлыки скрыты.''
так, что, когда вы проходите через них, вы делаете xticklabels пустыми невидимыми (что не повлияет на визуализацию, но может означать, что вы не тянете правильные метки). Вы можете попробовать:vis_labels = [label for label in ax.get_xticklabels() if label.get_visible() is True]; plt.setp(vis_labels[::2], visible==False)
Это старая тема, но я спотыкаюсь об этом время от времени и сделал эту функцию. Это очень удобно:
Одним из предостережений контроля тиков, подобных этому, является то, что больше не нравится интерактивное автоматическое обновление максимального масштаба после добавленной строки. Тогда делай
и снова запустите функцию перенастройки.
источник
Я разработал не элегантное решение. Учтите, что у нас есть ось X, а также список меток для каждой точки в X.
Пример: Допустим, я хочу показывать метки только для 'feb' и 'jun' Хорошо, теперь у нас есть поддельный список ярлыков. Сначала мы подготовили оригинальную версию. Теперь модифицированная версия.источник
если вы просто хотите установить интервал простой однострочный с минимальным шаблоном:
также легко работает для мелких тиков:
немного аппетитно, но довольно компактно
источник
Это сработало для меня
если вы хотите, чтобы тики между [1,5] (1 и 5 включительно), то замените
источник
xmarks = range(1, length+1, 1)
. уверен, что понимание списка излишне.Чистая реализация Python
Ниже приведена чистая реализация на Python требуемой функциональности, которая обрабатывает любой числовой ряд (int или float) с положительными, отрицательными или смешанными значениями и позволяет пользователю указать желаемый размер шага:
Пример вывода
Образец использования
Обратите внимание, что ось X имеет целочисленные значения, все они равномерно распределены на 5, тогда как ось Y имеет другой интервал (
matplotlib
поведение по умолчанию, поскольку галочки не были указаны).источник