С помощью matplotlib, как сделать легенду непрозрачной для диаграммы, но в конце прозрачной для фона? - PullRequest
0 голосов
/ 27 января 2020

У меня проблема с фоном рисунков matplotlib, когда они встроены в HTML страницы различных цветов фона.

Я сохраняю рисунки в виде файлов PNG или SVG и встраиваю их в HTML с помощью img тег. Это работает; Я вижу диаграмму на веб-странице.

Фон рисунка, отображаемый на странице HTML, должен совпадать с фоном страницы, поэтому я делаю рисунок прозрачным с помощью fig.savefig(filename, transparent=True).

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

Нежелательные:
серый HTML фон, прозрачная диаграмма, непрозрачная легенда:
ax.legend(..., framealpha=1)

grey HTML background, transparent diagram, opaque legend
Рис. 1

Еще хуже:
серый HTML фон, прозрачная диаграмма, прозрачная легенда:
ax.legend(..., framealpha=0)

grey HTML background, transparent diagram, transparent legend
Рис. 2

Как это должно выглядеть:
Используя трюк, чтобы сделать легенду непрозрачной и использовать серый цвет лица, я могу добиться желаемого вида на сером фоне:
ax.legend(..., facecolor='lightgrey', framealpha=1)

desired colors on the grey background
Рис. 3

Не переносимо:
Но опять же, когда на странице с белым фоном, Я получаю ту же проблему, что и на рис. 1, только с замененными цветами:
same problem like in Fig. 1, just with swapped colors
Рис. 4

Использование этого обходного пути заставит меня сгенерировать цифры отдельно для всех HTML цветов фона, и мне нужно будет восстанавливать фигуры при изменении цвета фона страницы HTML.

Есть ли лучше способ

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