每个级别以不同的格式拆分matplotlib标题

时间:2019-02-03 17:07:35

标签: python matplotlib data-visualization

我正在尝试制作一个matplotlib图,该图具有四个级别的标题,每个级别的格式规范都不同。

我阅读了类似的帖子here,该帖子有助于添加多级标题。但是,例如,我仍然不确定如何使它们分别具有不同的颜色。有没有简单的方法可以做到这一点?

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

\ n添加了色阶,但不能将“标准化占用”颜色设为黑色,将“ Neigbors”颜色设为蓝色。

1 个答案:

答案 0 :(得分:0)

我能够基于this official example创建一个解决方案。如您所见,该解决方案不是通用的,而是适用于您的特定示例。

这里唯一针对问题的内容是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