Решение
set_fact:
fact2: "{{ fact1 | map('regex_replace', '(.*)', 'https://\\1:8000') | join(',') }}"
Объяснение
map
фильтр применяет фильтр (regex_replace
) к отдельным элементам списка ; regex_replace
фильтр (со следующим регулярным выражением) добавляет к строке prefix
и suffix
; current_list | map('regex_replace', '(.*)', 'prefix\\1suffix')
join
filter преобразует список в строку с разделителями-запятыми в выходном файле. Альтернативный
Еще одно возможное решение (основанное на том, что вы уже знаете) - использовать Jinja2 непосредственно для целевой строки:
set_fact:
fact2: "{{ 'https://' + fact1|join(':8000,https://') + ':8000' }}"
Легенда заполняется колонками слева направо. Другими словами, если вы обманом поймете, что есть еще одна строка (без текста или цвета строки в легенде), вы можете заполнить пространство под «plot 3».
import numpy as np
import matplotlib.pyplot as plt
from pylab import *
X = np.linspace(0,100,11)
plt.plot(X,-X, label='plot 1', color='red')
plt.plot(X,-2*X, label='plot 2', color='green')
plt.plot(X,-3*X, label='plot 3', color='blue')
line1 = Line2D(range(10), range(10), marker='', color="red")
line2 = Line2D(range(10), range(10), marker='',color="green")
line3 = Line2D(range(10), range(10), marker='', color="blue")
line4 = Line2D(range(10), range(10), marker='', color="white")
plt.legend((line1,line4, line3,line2),('plot1','','plot3','plot2'),numpoints=1, loc=4,ncol=2)
plt.show()
Дифференциальная реализация ответа @cosmosis. Вероятно, это более гибко.
import numpy as np
import matplotlib.pyplot as plt
X = np.linspace(0,100,11)
plt.plot(X,-X, label='plot 1', color='red')
plt.plot(X,-2*X, label='plot 2', color='green')
plt.plot(X,-3*X, label='plot 3', color='blue')
(lines, labels) = plt.gca().get_legend_handles_labels()
#it's safer to use linestyle='none' and marker='none' that setting the color to white
#should be invisible whatever is the background
lines.insert(1, plt.Line2D(X,X, linestyle='none', marker='none'))
labels.insert(1,'')
plt.legend(lines,labels,numpoints=1, loc=4,ncol=1)
plt.show()
Другой вариант - создать две легенды в качестве здесь , а затем вытеснить их с помощью ключевого слова bbox_to_anchor здесь
(lines, labels) = plt.gca().get_legend_handles_labels()
leg1 = plt.legend(lines[:1], labels[:1], bbox_to_anchor=(0,0,0.8,1), loc=1)
leg2 = plt.legend(lines[1:], labels[1:], bbox_to_anchor=(0,0,1,1), loc=1)
gca().add_artist(leg1)
Выполняя это, я получаю [/g2] без необходимости добавления каких-либо других объектов.
Третий подход, основанный на ответе Франнеско. Нарисуйте строку-заполнитель с альфа = 0 (прозрачным).
#draw your actual lines here
#plt....
lines, labels = plt.gca().get_legend_handles_labels()
lines.insert(1, plt.Line2D([],[], alpha=0))
labels.insert(1,'')
plt.legend(lines,labels,ncol=2)
plt.show()
Это имеет те же преимущества, что и в его ответе. Однако это решение не работает в matplotlib 1.5.1 (под python3), говоря ValueError: Unrecognized marker style none