2017-06-27 6 views
1

Ich versuche, ein Diagramm mit Matplotlib zu generieren und ich verwende die 'Stix' Schriftart (rcParams ['Mathtext.fontset'] = 'Stix') um haben glatte Schriftgrößenübergänge von Text zu mathematischem Text. Einige meiner mathematischen Symbole möchten jedoch kursiv (skalare Werte) und einige kursiv sein. UND Fett (Tensoren). Ich möchte nicht durch die Lösung gehen, Latex-Rendering zu verwenden, denn dann sind andere Dinge durcheinander.Machen Sie eine Beschriftung sowohl kursiv als auch Fett in Matplotlib mit Stix Schriftart

Ich werde Ihnen ein kleines Beispiel geben, die das Problem darstellt:

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() 

Wenn Sie den Code ausführen das erste Etikett ist Kursiv und das zweite Etikett ist Bold. Wie könnte ich erreichen, dass das zweite Label fett und kursiv ist?

Problem with math text to be Italic and bold

+0

Ich glaube nicht, dass es möglich ist. Möglicherweise müssen Sie True-Latex (d. H. Usetex = True) verwenden, und dann könnte diese Frage helfen: https://tex.stackexchange.com/questions/14395/bold-italic-vectors – ImportanceOfBeingErnest

Antwort

0

einige spezifischere mathtext params werden benötigt:

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

Bitte beachte, dass ich die mathbf in einer Achsenbeschriftung verwendet, auch. Würde wahrscheinlich den Rest des Labels in eine STIX-Schriftart ändern, die Sie einen nicht-kursiven Nicht-Fett-Fall definieren können: siehe docs unter 'Benutzerdefinierte Schriftarten'.

+0

Danke! Das war was ich brauchte! – Alex

+0

Wenn es eine vollständige Antwort für Sie ist, überprüfen Sie es, damit andere Leute, die nach Fragen/Antworten suchen, wissen, welcher Status dieser ist. Auch war es einfach zu beantworten, weil Ihr Beispiel einfach und klar und _complete_ war. – cphlewis

-1

So matplotlib wird mit LaTeX-Syntax, so meine beste Vermutung ist, dass Sie LaTeX-Syntax verwenden können, wie kursiven und fett zu bekommen, das ist

\textbf{\textit{text}} 

es also in Ihrem Fall würde sein

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

Die Antwort funktioniert nicht. – ImportanceOfBeingErnest

Verwandte Themen