Разделить заголовок matplotlib с различным форматированием для каждого уровня - PullRequest
0 голосов
/ 03 февраля 2019

Я пытаюсь создать сюжет matplotlib, который имеет четыре уровня заголовка с разными спецификациями форматирования для каждого уровня.

Я читал этот аналогичный пост здесь , который помогает с добавлением многоуровневогоназвания.Тем не менее, я до сих пор не уверен, как сделать их, например, разных цветов.Есть ли какой-нибудь простой способ сделать это?

ax.set_title('Normalized occupied \n Neighbors')

\ n добавляет уровень, но не может сделать черный цвет "Normalized оккупированный" и синий "Neigbors".

1 Ответ

0 голосов
/ 03 февраля 2019

Мне удалось создать решение на основе этого официального примера .Как видите, решение не является общим , но работает для вашего конкретного примера.

Единственная проблема, характерная для данной проблемы, это 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)

enter image description here

Упрощенная версия с изменением размера шрифта

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

enter image description here

...