2015-11-10 3 views
3

Как рисовать фигуры в matplotlib, используя размеры точки/дюйма?Размер патча Matplotlib в точках

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

В идеале я хотел бы поместить прямоугольник в координаты данных, но установить его размер в точках, подобно тому, как работают маркеры строк.

Вот пример сюжета, который я пытаюсь создать. В настоящее время я устанавливаю черные и красные прямоугольники в координатах (данные, оси). Это работает, когда граф является известным размером, но сбой при его масштабировании по мере уменьшения размеров ящиков даже с помощью размера текста является постоянным.

enter image description here

enter image description here

+0

Вы видели [это] (http://stackoverflow.com/questions/332289/how-do-you-change-the-size-of-figures-drawn- с-Matplotlib). Вы можете сделать преобразование в конце. –

+0

Я приложил несколько фотографий, показывающих проблему. Полагаю, я мог бы прочитать размер фигуры и рассчитать, какая часть осей будет представлять собой определенное количество дюймов, но это кажется очень хрупким. – user65

ответ

2

Законченное выяснить это с помощью этого вопроса: How do I offset lines in matplotlib by X points

Там отсутствует встроенный в способ указать размеры заплаты в точках, поэтому вы должны вручную вычислить отношение осей или координат данных к дюймах/точкам. Это соотношение, конечно, будет меняться в зависимости от размера фигуры/осей.

Это достигается путем запуска (1, 1) точки через преобразование осей и просмотра, где оно заканчивается в пиксельных координатах. Затем пиксели можно преобразовать в дюймы или точки через цифру dpi.

t = axes.transAxes.transform([(0,0), (1,1)]) 
t = axes.get_figure().get_dpi()/(t[1,1] - t[0,1])/72 

# Height = 18 points 
height = 18 * t 

enter image description here enter image description here

Смежные вопросы