2017-06-27 5 views
1

J'essaye de générer un complot avec matplotlib et j'utilise la police 'stix' (rcParams ['mathtext.fontset'] = 'stix') afin de avoir des transitions de taille de police lisse du texte au texte mathématique. Cependant, certains de mes symboles mathématiques, je veux être en italique (valeurs scalaires) et d'autres en italique ET Gras (tenseurs). Je ne veux pas passer par la solution d'utiliser le rendu en latex car d'autres choses sont en désordre.Faire une étiquette à la fois Italique et Bold style dans Matplotlib avec la police stix

je vais vous donner un petit exemple qui illustre le problème:

from numpy import * 
from matplotlib.pyplot import * 

# Chaning font to stix 
rcParams['mathtext.fontset'] = 'stix' 

# Some data to constract this plotting example 
datax=[0,1,2] 
datay=[8,9,10] 
datay2=[8,15,10] 

fig, ay = subplots() 

ay.plot(datax, datay, color="0.", ls='-', label= r"$F_{\alpha}$") 
ay.plot(datax, datay2, color="0.", ls='-', label=r"$\mathbf{F_{\alpha}}$") 

# Now add the legend with some customizations. 
legend = ay.legend(loc='left', shadow=True) 

#frame = legend.get_frame() 
#frame.set_facecolor('0.90') 
xlabel(r"x label",fontsize=18) 
ylabel(r'y label', fontsize=18) 
grid() 

show() 

Si vous exécutez le code de la première étiquette est en italique et la deuxième étiquette est en gras. Comment puis-je obtenir la deuxième étiquette pour être en gras et en italique?

Problem with math text to be Italic and bold

+0

Je ne pense pas que ce soit possible. Vous devrez peut-être utiliser true latex (c'est-à-dire usetex = True) et cette question pourrait vous aider: https://tex.stackexchange.com/questions/14395/bold-italic-vectors – ImportanceOfBeingErnest

Répondre

0

quelques mathtext params plus spécifiques sont nécessaires:

from numpy import * 
from matplotlib.pyplot import * 

# Changing font to stix; setting specialized math font properties as directly as possible 
rcParams['mathtext.fontset'] = 'custom' 
rcParams['mathtext.it'] = 'STIXGeneral:italic' 
rcParams['mathtext.bf'] = 'STIXGeneral:italic:bold' 

# Some data to construct this plotting example 
datax=[0,1,2] 
datay=[8,9,10] 
datay2=[8,15,10] 

fig, ay = subplots() 

ay.plot(datax, datay, color="0.", ls='-', label= r"$\mathit{F_{\alpha}}$") 
ay.plot(datax, datay2, color="0.", ls='-', label=r"$\mathbf{F_{\alpha}}$") 

# Now add the legend with some customizations. 
legend = ay.legend(loc='left', shadow=True) 

# Using the specialized math font again 
xlabel(r"$\mathbf{x}$ label",fontsize=18) 
ylabel(r'y label', fontsize=18) 
grid() 

show() 

enter image description here

Notez que je l'mathbf dans une étiquette d'axe aussi. Modifierait probablement le reste de l'étiquette en une police STIX, que vous pouvez définir comme un cas non-italique-non-gras: voir le docs sous 'Polices personnalisées'.

+0

Merci! C'était ce dont j'avais besoin! – Alex

+0

Si c'est une réponse complète pour vous, cochez-la afin que les autres personnes à la recherche de questions/réponses sachent quel statut celui-ci est. En outre, il était facile de répondre parce que votre exemple était simple et clair et _complete_. – cphlewis

-1

Alors Matplotlib utilise la syntaxe LaTeX, donc ma meilleure estimation est que vous pouvez utiliser la syntaxe LaTeX pour savoir comment obtenir italiques et gras, qui est

\textbf{\textit{text}} 

Donc, dans votre cas, il être

ay.plot(datax, datay2, color="0.", ls='-', label= r"$\mathbf{ \textit{F_{\alpha}} }$") 
+0

La réponse ne fonctionne pas. – ImportanceOfBeingErnest