Как визуализировать подстроки строки LaTeX разных цветов в matplotlib? - PullRequest
0 голосов
/ 04 февраля 2019

Невозможно отобразить разные цвета для определенных символов в строке LaTeX

Мне нужно изменить цвет подстрок в строке LaTeX для заголовка графика.Я пробовал несколько разных подходов, большинство из которых давали ошибки и / или предупреждения.Код ниже не дает ошибок или предупреждений, но не отображает указанный цвет.

# -*- coding: utf-8 -*-
import numpy as np
import matplotlib
matplotlib.use("WXAgg")
import matplotlib.pyplot as plt
plt.rc('text', usetex=True)
plt.rc('text.latex', preamble = r'\usepackage{xcolor}')

N = 50
x = np.random.rand(N)
y = np.random.rand(N)

fig, ax = plt.subplots()
ax.scatter(x, np.cos(x), color = 'blue', marker = "+", s=47.5)
ax.set_title(r'$\color{red}{X}X$') 
#ax.set_title(r"\textcolor{red}{X} $\color{red}{X}$") # does not work either

plt.show()

1 Ответ

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

Самый простой способ,

t = ax.set_title("red")
t.set_color("r")

Полный пример,

import numpy as np
import matplotlib
matplotlib.use("WXAgg")
import matplotlib.pyplot as plt

plt.rc('text', usetex=True)


N = 50
x = np.random.rand(N)
y = np.random.rand(N)

fig, ax = plt.subplots()
ax.scatter(x, np.cos(x), color = 'blue', marker = "+", s=47.5)
t = ax.set_title(r"X $X$")
t.set_color("r")

plt.show()

ОБНОВЛЕНИЕ:

Эту идею с текстом можно использовать, чтобы получить разные цвета вотдельное слово, хотя и не идеальное решение, так как вы должны выстраивать различные буквы в ряд,

t1 = fig.text(0.5,0.9,"$X$", transform=ax.transAxes)
t1.set_color("r")
t2 = fig.text(0.515,0.9,"$X$", transform=ax.transAxes)
t2.set_color("b")

Вы можете сделать это функцией, как в этом примере , адаптированном для названия,

import numpy as np
import matplotlib
import matplotlib.pyplot as plt
from matplotlib.offsetbox import AnchoredOffsetbox, TextArea, HPacker

def multicolor_label(ax, list_of_strings, list_of_colors, anchorpad=0, **kw):
    boxes = [TextArea(text, textprops=dict(color=color, ha='left',va='bottom',**kw)) 
                for text,color in zip(list_of_strings,list_of_colors) ]
    xbox = HPacker(children=boxes,align="center",pad=0, sep=5)
    anchored_xbox = AnchoredOffsetbox(loc=3, child=xbox, pad=anchorpad, frameon=False, 
                                      bbox_to_anchor=(0.5, 1.0), 
                                      bbox_transform=ax.transAxes, borderpad=0.)
    ax.add_artist(anchored_xbox)

plt.rc('text', usetex=True)

N = 50
x = np.random.rand(N)
y = np.random.rand(N)

fig, ax = plt.subplots()
ax.scatter(x, np.cos(x), color = 'blue', marker = "+", s=47.5)
multicolor_label(ax, ["$X$", "$X$"], ["r", "b"])
plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...