Трябва да генерират разпръснати парцели за няколко набори от данни 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
.