split title of a figure in matplotlib

后端 未结 5 1317
温柔的废话
温柔的废话 2020-12-24 06:35

I use matplotlib to create a figure with 4 sub-plots in it.

I would like to split one of my title of a subplot, such that each line would be in the centered with res

5条回答
  •  情深已故
    2020-12-24 07:03

    In addition to the previous answers, if someone wants to automate the operation I have coded a function to make this easy. here is it:

    def split_title_line(title_text, split_on='(', max_words=5):  # , max_words=None):
        """
        A function that splits any string based on specific character
        (returning it with the string), with maximum number of words on it
        """
        split_at = title_text.find (split_on)
        ti = title_text
        if split_at > 1:
            ti = ti.split (split_on)
            for i, tx in enumerate (ti[1:]):
                ti[i + 1] = split_on + tx
        if type (ti) == type ('text'):
            ti = [ti]
        for j, td in enumerate (ti):
            if td.find (split_on) > 0:
                pass
            else:
                tw = td.split ()
                t2 = []
                for i in range (0, len (tw), max_words):
                    t2.append (' '.join (tw[i:max_words + i]))
                ti[j] = t2
        ti = [item for sublist in ti for item in sublist]
        ret_tex = []
        for j in range (len (ti)):
            for i in range(0, len(ti)-1, 2):
                if len (ti[i].split()) + len (ti[i+1].split ()) <= max_words:
                    mrg = " ".join ([ti[i], ti[i+1]])
                    ti = [mrg] + ti[2:]
                    break
    
        if len (ti[-2].split ()) + len (ti[-1].split ()) <= max_words:
            mrg = " ".join ([ti[-2], ti[-1]])
            ti = ti[:-2] + [mrg]
        return '\n'.join (ti)
    

    Examples:

    In: split_title_line ('Primary school completion (% of girls)')

    out:

    Primary school completion 
    (% of girls)
    

    In: split_title_line ('Primary school completion in the country as % of girls') Out:

    Primary school completion in the
    country as % of girls
    

    For your question to split titles in matplotlib or so, you can add this ax.set_title(split_title_line(r'Normalized occupied Neighbors', max_words=2))

    Hope that everyone benefits from this.

提交回复
热议问题