Мне удалось создать решение на основе этого официального примера .Как видите, решение не является общим , но работает для вашего конкретного примера.
Единственная проблема, характерная для данной проблемы, это x_pos = [0.3, 0.4]
, потому что вы хотите выровнять подзаголовки по центру.Если вы удалите x_pos
и просто используете 0,5, вы увидите, что код все еще работает, но выравнивание выполняется по левому краю.Здесь я использую y=1.2
, чтобы указать начальную позицию заголовка в относительных координатах.y=0
означает нижнюю ось X, а y=1
означает верхнюю ось X.
Я упростил несколько строк, чтобы уменьшить сложность.
import matplotlib.pyplot as plt
def rainbow_title(x_pos, y, strings, colors, ax=None, **kw):
if ax is None:
ax = plt.gca()
for x, s, c in zip(x_pos, strings, colors):
text = ax.text(x, y, s + " ", color=c, **kw)
y *= 0.9
x_pos = [0.3, 0.4]
rainbow_title(x_pos, 1.2, "Normalized occupied\n Neighbors".split('\n'),
['black', 'blue'], size=18)

Упрощенная версия с изменением размера шрифта
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
title = "Normalized occupied\n Neighbors"
x_pos = [0.3, 0.4]
sizes = [18, 14]
colors = ['black', 'blue']
y = 1.2
for x, s, c, size in zip(x_pos, title.split('\n'), colors, sizes):
text = ax.text(x, y, s + " ", color=c, size=size)
y *= 0.9
