/ / matplotlib: получете съотношението на оста на парцела - питън, matplotlib

matplotlib: получите съотношение на оста на парцела - питън, matplotlib

Трябва да генерират разпръснати парцели за няколко набори от данни 2D автоматично.

По подразбиране е зададено съотношение ax.set_aspect(aspect="equal"), които повечето време работят, защото x,y стойностите се разпределят повече или по-малко в квадратна област.

Понякога, обаче, срещам набор от данни, който, когато се начертава с equal съотношение, изглежда така:

въведете описанието на изображението тук

т.е .: твърде тясна в дадена ос. За горното изображение оста е приблизително 1: 8.

В такъв случай, съотношението на размера на ax.set_aspect(aspect="auto") ще доведе до много по-добър заговор:

въведете описанието на изображението тук

Сега не искам да го поставям aspect="auto" като моето по подразбиране за всички набори от данни, защото използвам aspect="equal" всъщност е правилния начин за показване на такъв разсейващ участък.

Трябва да се върна към употребата ax.set_aspect(aspect="auto") само за случаи като този по-горе.

Въпросът: има ли начин да се знае преди това, ако съотношението на участък ще бъде твърде стеснено, ако aspect="equal" се използва? Подобно на получаването на действителното съотношение на изобразения набор от данни.

По този начин, въз основа на такъв номер, мога да коригирам аспектното съотношение към нещо по-скромно изглеждащо (т.е .: auto или друго съотношение) вместо "equal".

Отговори:

4 за отговор № 1

Нещо като това трябва да се направи,

aspect = (max(x) - min(x)) / (max(y) - min(y))

2 за отговор № 2

Най- axes метод get_data_ratio дава аспект съотношението на границите на вашите данни както е показано

ax.get_data_ratio()

например:

M = 4.0
ax.set_aspect("equal" if 1/M < ax.get_data_ratio() < M else "auto")

¹Това е реципрочното на Отговорът на @farenorth когато осите се мащабират около данните, т.е. кога max(y) == max(ax.get_ylim()) тъй като се изчислява, като се използват диапазоните в ax.get_ybound и ax.get_xbound.