В документах для ax.bar
указано, что url
должно быть строкой, но вы используете список ...
Почему при использовании списка вместо этого не возникает исключение строки, когда вы вызываете ax.bar
?
ax.bar(["A","B"], [10, 4], url=["https://en.wikipedia.org", "https://www.google.com/"])
Поскольку Matplotlib не проверяет тип выражения, которое вы назначаете url
. Исключение возникает только тогда, когда серверная часть SVG пытается использовать значение url
, в частности, серверная часть предполагает, что имеет дело со строкой и использует строковый метод, но ваше значение является списком и имеет не требуемый метод, поэтому AttributeError: 'list' object has no attribute 'replace'
.
Что вы можете сделать, чтобы избежать проблемы, возникающей, когда Matplotlib пытается использовать значение url
?
Если вы хотите связать ссылку с гистограммой в целом, вы должны использовать одну строку.
Если вы хотите связать ссылку с каждым из столбцы на графике вы можете сделать следующим образом
...
bars = plt.bar((1, 2), (3, 4))
for bar, url in zip(bars, ["https://en.wikipedia.org", "https://www.google.com/"]):
bar.set_url(url)
...
Конечно, ничто не мешает вам связать ссылку на столбиковый график И с каждым из столбцов, но
bars = plt.bar((1, 2, 3), (3, 4, 5), url='https://www.google.com/0')
for n, bar in enumerate(bars, 1): bar.set_url('https://www.google.com/%d'%n)
plt.savefig('delenda.est', format='svg')
как видите, в файле SVG сохраняются только ссылки, относящиеся к полосам:
$ grep google delenda.est
<a xlink:href="https://www.google.com/1">
<a xlink:href="https://www.google.com/2">
<a xlink:href="https://www.google.com/3">
$