Я сталкиваюсь с серьезными трудностями при размещении AnchoredSizeBar за пределами заданных осей. Из справочника AnchoredSizeBar атрибут loc принимает только строковые методы, которые относятся к заданным осям, используемым для создания AnchoredSizeBar.
Поэтому, если бы я хотел установить положение AnchoredSizeBar вне заданных осей, атрибут loc не работал бы. На самом деле, это вызовет сообщение об ошибке.
Может кто знает способ обойти эту проблему?
Если возможно, я хотел бы создать AnchoredSizeBar, чей размер полосы все же относится к заданным осям на рисунке, но местоположение AnchoredSizeBar может быть размещено в любом месте внутри экземпляра рисунка.
Вот код, вырезанный из того, что я хотел бы:
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1.anchored_artists import AnchoredSizeBar
fig, ax = plt.subplots(figsize=(3, 3))
x_position = 0.15
y_position = 0.35
Figure_location = (x_position, y_position) # figure xy locations relative to fig.transFigure.
axes_width_to_size_bar = 0.3
bar0 = AnchoredSizeBar(ax.transData, axes_width_to_size_bar, 'unfilled', loc=Figure_location, frameon=False, size_vertical=0.05, fill_bar=False)
ax.add_artist(bar0)
bar0_extent = bar0.get_extent()
fig.show()
Я благодарю вас за ваше время. Искренне Ваш,
Филипп Рискалла Леаль
AnchoredSizeBar
подклассы matplotlib.offsetbox.AnchoredOffsetbox
. Следовательно, дополнительные аргументы передаются AnchoredOffsetbox
. Это обеспечивает аргументы bbox_to_anchor
и bbox_transform
. Это то же самое, что и для легенд, поэтому для пояснений см. любой пример легенды, например. Как убрать легенду из сюжета.
Например, чтобы поместить AnchoredSizeBar в правый верхний угол рисунка,
import matplotlib.pyplot as plt
def draw_sizebar(ax):
from mpl_toolkits.axes_grid1.anchored_artists import AnchoredSizeBar
from matplotlib.transforms import Bbox
asb = AnchoredSizeBar(ax.transData,
0.1,
"5 warp units",
loc='upper right',
pad=0.1, borderpad=0.5, sep=5,
frameon=False,
bbox_to_anchor=Bbox.from_bounds(0, 0, 1, 1),
bbox_transform=ax.figure.transFigure)
ax.add_artist(asb)
fig, ax = plt.subplots()
draw_sizebar(ax)
plt.show()
Уважаемый ImportanceOfBeingErnest, одна вещь из вашего примера, которая вызвала у меня некоторое сомнение, - это метка: «5 единиц деформации». Означает ли это, что заданная длина AnchoredSizeBar представляет собой линейку из 5 единиц относительно единицы проекции осей? Если бы это было так, то из визуального анализа данного рисунка можно заметить, что это не так. На самом деле AnchoredSizeBar имеет размерность 0,1 (единицы оси). Не будете ли вы так любезны пролить свет на эту тему? Искренне,
Да, в моем примере 0,1 единиц данных — это 5 единиц деформации.
Самое интересное! Не могли бы вы объяснить, какое преобразование произошло, чтобы преобразовать единицы оси 0,1 в единицы деформации 5? Кроме того, что значит варп-юниты? Я благодарю вас за ваше время. Искренне,
Трансформации не происходит. "варп-юниты" только что придумал я. Замените эту строку на «0,1 единицы данных», если это вас сбивает с толку.
Спасибо, ImportanceOfBeingernest. Теперь мне окончательно ясно. Искренне,
Уважаемый ImportanceOfBeingErnest, не знаете ли вы, как добавить цвет фона в AnchoredSizeBar? Фигура по-прежнему нечеткая.