Matplotlib: Как составить точечный график произвольных чисел пиплота - PullRequest
7 голосов
/ 26 мая 2019

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

Используя TextArea Я могу поместить небольшие строки вместо изображений в разных координатах.

Как насчет того, чтобы разместить мини-версию сюжета / изображения, созданного самим matplotlib?Предположим, что вместо использования image.jpg я хочу использовать результат plt.stem(arr) в качестве изображения на точечных диаграммах.

Как я могу это сделать?Как насчет миниатюрной версии вывода plt.plot(x, y)?

Я попытался изменить приведенную в связанном вопросе функцию так:

def stem_scatter(x, y, arr, ax=None):

    from matplotlib.offsetbox import AnnotationBbox, DrawingArea

    if ax is None:
        ax = plt.gca()
    im = DrawingArea(0.1, 0.1)
    im.add_artist(plt.stem(arr))
    x, y = np.atleast_1d(x, y)
    artists = []
    for x0, y0 in zip(x, y):
        ab = AnnotationBbox(im, (x0, y0), xycoords='data', frameon=False)
        artists.append(ax.add_artist(ab))
    ax.update_datalim(np.column_stack([x, y]))
    ax.autoscale()
    return artists

Но это выдает ошибку: AttributeError: 'StemContainer' object has no attribute 'is_transform_set'

РЕДАКТИРОВАТЬ: Из связанного вопроса:

"…. but the second has a large advantage. The annotation box approach will allow the image to stay at a constant size as you zoom in."

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

1 Ответ

1 голос
/ 26 мая 2019

Вы можете попробовать что-то вроде: https://matplotlib.org/api/_as_gen/matplotlib.axes.Axes.inset_axes.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...