Как автоматически получить «хорошие» значения для первой и последней меток оси в matplotlib?

#python #matplotlib #axis #axis-labels

Вопрос:

На этом графике matplotlib автоматически скрывает первую и последнюю метки осей. Однако желаемое поведение состоит в том, чтобы всегда показывать как первую, так и последнюю метки оси, и это тоже «хорошее» значение. Под «хорошим» значением я подразумеваю, что основной тик должен присутствовать на обеих границах оси. Например, на рисунке, показанном ниже, ось x начиналась бы с -0,1 и заканчивалась на 1,5. Аналогично, ось y начиналась бы с -0,25 и заканчивалась на 2,00. Как этого можно достичь в Matplotlib?

Заранее спасибо за вашу помощь.

введите описание изображения здесь

Комментарии:

1. Устраняет ли это проблему? plt.xticks(x)

2. Ищите plt.MaxNLocator() ax.set_xticklabels() и используйте их.

3. Это просто сбрасывает последнюю галочку из-за ошибки округления. Set_ylim(-0.1, 2.0001) должен показывать галочки.

4. @JodyKlymak Я не хочу устанавливать ограничение вручную, так как диапазон отличается в каждом вызове.

5. @swatchai Я искал оба этих варианта, но ни один не помог. Я думаю, что проблема будет решена, если мы сможем добавить по одному дополнительному галочке на обоих краях оси. Но я не мог найти способ сделать это с AutoLocator() помощью операционной MaxNLocator()

Ответ №1:

Я решил эту проблему, сначала позволив matplotlib найти идеальные места для галочек, а затем установив пределы оси таким образом, чтобы на обоих краях оси добавлялся один дополнительный тик.

 plt.figure()
plt.plot(xdata, data)
loc, labels = plt.xticks()    #returns the current tics and lables.
min_new = loc[0] - (loc[1]-loc[0])
max_new = loc[len(loc)-1]   (loc[1]-loc[0])
plt.xlim(left=min_new, right=max_new)
plt.gca().xaxis.set_major_locator(AutoLocator())
plt.gca().yaxis.set_major_locator(AutoLocator())
plt.show()
 

Изменить:
То же самое можно было бы также достичь, расширив пределы оси до скрытых отметок по краям. т. е.,

 loc, labels = plt.xticks()
plt.xlim(left=loc[0], right=loc[len(loc)-1])