Подсюжет matplotlib.pyplot обрезается с правой стороны

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

def plot_probability_per_class(probabilities, classes, image):
    figure = plt.figure()
    figure.subplots_adjust(right=1.5, hspace=0.5)

    subplot = figure.add_subplot(1,2,1)
    subplot.set_title('Probability per class')
    plt.plot(classes, probabilities, 'ro')  
    plt.ylabel('Probability')
    plt.xlabel('Class ID')

    subplot = figure.add_subplot(1,2,2)
    subplot.set_title('Image')
    plt.imshow(image)

    plt.show()

Ниже приведен пример сгенерированного рисунка:

введите здесь описание изображения

И пока я спрашиваю, сможет ли кто-нибудь показать мне, как разместить легенду справа от (или, может быть, ниже) диаграммы рассеяния, чтобы показать описание идентификаторов классов. Примерно так:

  1. = Ограничение скорости (20 км / ч)
  2. = Ограничение скорости (30 км / ч)
  3. = Ограничение скорости (50 км / ч)
  4. = Ограничение скорости (60 км / ч)
  5. = Ограничение скорости (70 км / ч)
  6. = Ограничение скорости (80 км / ч)
  7. = Конец ограничения скорости (80 км / ч)
  8. = Ограничение скорости (100 км / ч)
  9. = Ограничение скорости (120 км / ч)
  10. = Нет прохождения
  11. = Запрещается проезд для транспортных средств более 3,5 метрических тонн

Я новичок в Matplotlib, и мне трудно читать документы API. Любая помощь будет оценена по достоинству.


person djilo    schedule 07.12.2016    source источник
comment
Почему вы используете: figure.subplots_adjust(right=1.5, hspace=0.5)?   -  person wflynny    schedule 07.12.2016
comment
Не уверен в вопросе о легенде. Обычно вы можете сделать plt.plot(x, y, 'r', label = 'Red'). Тогда вы сделали бы plt.legend(loc='lower right'). Я мог бы помочь больше, если бы знал, на что ссылаются эти скорости, но я не вижу их ни в коде, ни в имеющемся у вас графике.   -  person gold_cy    schedule 07.12.2016
comment
@wflynny Удаление этой строки помогло. Думаю, я скопировал и вставил эту строку из другой функции, которую использовал для построения данных. Спасибо! Кстати, подскажите, как добавить легенду?   -  person djilo    schedule 07.12.2016
comment
Соответствующий вопрос о легенде: stackoverflow.com/questions/27174425/   -  person wflynny    schedule 08.12.2016
comment
@wflynny Это может быть излишним. Достаточно просто разместить где-нибудь текстовое поле с этими строками. subplot.text(0.99,0.99, "1. Speed limit (20km/h)\n2. Speed limit (30km/h)", transform=subplot.transAxes, ha="right", va="top", fontsize=8, bbox={'facecolor':'w', 'alpha':0.5, 'pad':10}) (Строки можно разделять с помощью \n)   -  person ImportanceOfBeingErnest    schedule 08.12.2016
comment
@ImportanceOfBeingErnest Конечно, OP может просто аннотировать каждую точку с помощью plt.annotate. Но если OP хочет использовать subplot.legend, то связанный способ - единственный способ, если OP не перенастроит график разброса (а не на самом деле разброса) для использования 11 разных маркеров или чего-то подобного.   -  person wflynny    schedule 08.12.2016
comment
@ImportanceOfBeingErnest Спасибо за полезный и конструктивный отзыв!   -  person djilo    schedule 08.12.2016
comment
@wflynny Еще раз спасибо за ваши комментарии. Я определенно новичок   -  person djilo    schedule 08.12.2016
comment
@djilo Теперь ваш вопрос решен? Если да, вы можете сами дать ответ и принять его. Это может помочь другим справиться с подобными проблемами и избавит от вопроса о том, чтобы навсегда остаться в списке нерешенных вопросов. Если наши комментарии не помогли решить вопрос, вы можете отредактировать его, чтобы уточнить свои требования, и оставить его открытым, чтобы другие ответили.   -  person ImportanceOfBeingErnest    schedule 08.12.2016
comment
@ImportanceOfBeingErnest Спасибо, что напомнили мне. Да, моя проблема решена. Ваше предложение текстового поля для аннотации работает для меня. И первоначальный ответ wflynny устранил проблему отключения.   -  person djilo    schedule 09.12.2016


Ответы (1)


Удаление следующей строки из моего кода устранило проблему отключения:

figure.subplots_adjust(right=1.5, hspace=0.5)

Кроме того, использование текстового поля помогло сделать трюк в том, что касается аннотирования сюжета. Еще раз спасибо @wflynny и @ImportanceOfBeingEarnest за их отзывы

person djilo    schedule 09.12.2016