Создавайте сложные пользовательские легенды, используя линии / маркеры как «плавающие» в тексте - PullRequest
0 голосов
/ 07 мая 2020

Проблема

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

Желаемый результат

enter image description here

Желаемый код

Мой идеальный код для типичной строки будет выглядеть примерно так:

h2 = ax.plot(..., marker='o', color='tab:green')
h4 = ax.plot(..., marker='o', color='tab:blue')
h8 = ax.plot(..., marker='o', color='tab:purple')
h16 = ax.plot(..., marker='o', color='tab:red')

ax.text(0, 1, ' '.join([
    'depth', 
    create_float(h2), '(2)', 
    create_float(h4), '(4)', 
    create_float(h8), '(8)', 
    create_float(h16), '(16)'])

Текущий код

Мой неутешительный код на данный момент:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

ax.text(0, -1, 'width: 2', ha='left', va='center')

x = 0
ax.text(x, 0, 'depth:', ha='left', va='center')
x += 0.2
ax.plot(x, 0, marker='o', color='tab:green')
x += 0.08
ax.text(x, 0, '(2)', ha='center', va='center')
x += 0.08
ax.plot(x, 0, marker='o', color='tab:blue')
x += 0.08
ax.text(x, 0, '(4)', ha='center', va='center')
x += 0.08
ax.plot(x, 0, marker='o', color='tab:purple')
x += 0.08
ax.text(x, 0, '(8)', ha='center', va='center')
x += 0.08
ax.plot(x, 0, marker='o', color='tab:red')
x += 0.08
ax.text(x, 0, '(16)', ha='center', va='center')

x = 0
ax.text(x, 1, 'shuffle:', ha='left', va='center')
x += 0.2
ax.plot(x, 1, marker='s', color='k')
x += 0.1
ax.text(x, 1, "(yes)", ha='center', va='center')
x += 0.1
ax.plot(x, 1, marker='o', color='k')
x += 0.1
ax.text(x, 1, "(no)", ha='center', va='center')

x = 0
ax.text(x, 2, r'probability:', ha='left', va='center')
x += 0.31
ax.plot(x, 2, marker='o', color='k', fillstyle='full')
x += 0.16
ax.text(x, 2, "(random)", ha='center', va='center')
x += 0.16
ax.plot(x, 2, marker='o', color='k', fillstyle='none')
x += 0.16
ax.text(x, 2, "(constant)", ha='center', va='center')

ax.set_xlim([-0.2, 1.5])
ax.set_ylim([-2.2, 4.2])

plt.savefig('plot.png')
plt.close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...