2013-04-29 9 views
7

अक्ष लेबल/किंवदंती बदलें, मैं कुछ प्रकाशन-गुणवत्ता वाले भूखंड बनाने की कोशिश कर रहा हूं, लेकिन मुझे एक छोटी सी समस्या का सामना करना पड़ा है। यह डिफ़ॉल्ट रूप से लगता है कि matplotlib धुरी लेबल और किंवदंती प्रविष्टियां धुरी टिक अंकों की तुलना में भारी भारित होती हैं। क्या निशान लेबल के रूप में अक्ष भार/किंवदंती प्रविष्टियों को वज़न कम करने के लिए वैसे भी है?पायथन matplotlib: बोल्ड से नियमित वजन

import matplotlib.pyplot as plt 
import numpy as np 

plt.rc('text',usetex=True) 
font = {'family':'serif','size':16} 
plt.rc('font',**font) 
plt.rc('legend',**{'fontsize':14}) 

x = np.linspace(0,2*np.pi,100) 
y = np.sin(x) 

fig = plt.figure(figsize=(5,5)) 
p1, = plt.plot(x,y) 
p2, = plt.plot(x,x**2) 
plt.xlabel('x-Axis') 
plt.ylabel('y-Axis') 
plt.legend([p1,p2],['Sin(x)','x$^2$']) 
plt.gcf().subplots_adjust(left=0.2) 
plt.gcf().subplots_adjust(bottom=0.15) 
plt.savefig('Test.eps',bbox_inches='tight',format='eps') 
plt.show() 

मैं गणित-मोड का उपयोग कर सकते हैं, लेकिन समस्या (झुंझलाहट) है जब मैं एक लेबल के लिए एक वाक्य है, जैसे कि,

plt.xlabel('$\mathrm{This is the x-axis}$') 

जो सभी को एक साथ squishes। मैं

plt.xlabel('$\mathrm{This\: is\: the\: x-axis}$') 

का उपयोग करके इसे ठीक कर सकते हैं लेकिन यह है कि विराम चिह्न का एक बहुत जरूरत है। मैं उम्मीद कर रहा था कि कुछ ऐसा हो जो मैं बदल सकता था जो मुझे \mathrm{} प्रारूप को बाईपास करने और मानक टीएक्स प्रारूप का उपयोग करने की अनुमति देगा।

अन्य विकल्प मैंने कोशिश की, \mathrm के बजाय \text का उपयोग कर रहा था, लेकिन ऐसा लगता है कि पायथन का दुभाषिया पैकेज amsmath लोड किए बिना इसे पहचानता नहीं है। मैंने यह भी कोशिश की है:

import matplotlib 
import matplotlib.pyplot as plt 
import numpy as np 

plt.rc('text',usetex=True) 
font = {'family':'serif','size':16} 
plt.rc('font',**font) 
plt.rc('legend',**{'fontsize':14}) 
matplotlib.rcParams['text.latex.preamble']=[r'\usepackage{amsmath}'] 

x = np.linspace(0,2*np.pi,100) 
y = np.sin(x) 

fig = plt.figure(figsize=(5,5)) 
p1, = plt.plot(x,y) 
p2, = plt.plot(x,x**2) 
plt.xlabel(r'$\text{this is the x-Axis}$') 
plt.ylabel('$y-Axis$') 
plt.legend([p1,p2],['Sin(x)','x$^2$']) 
plt.gcf().subplots_adjust(left=0.2) 
plt.gcf().subplots_adjust(bottom=0.15) 
plt.savefig('Test.eps',bbox_inches='tight',format='eps') 
plt.show() 

यह वांछित परिणाम भी वापस नहीं करता है।

उत्तर

5

दूसरा उत्तर समस्या के आसपास एक कार्य प्रदान करता है ... हालांकि, समस्या matplotlib और लेटेक्स बैकएंड के कार्यान्वयन के लिए बहुत विशिष्ट है।

सबसे पहले, अक्ष लेबलों के फ़ॉन्ट वजन को नियंत्रित करने वाले rc पैरामीटर 'axes.labelweight' है, जो डिफ़ॉल्ट रूप से u'normal' पर सेट होता है। इसका मतलब यह है कि लेबल नियमित वजन में पहले से ही होना चाहिए।

कारण है कि फ़ॉन्ट बोल्ड हो गया लगता है matplotlib/texmanager.py में पाया जा सकता:

  1. फ़ॉन्ट परिवार ओपी के मामले में, 'font.family' द्वारा चुना जाता है, इस serif है।

  2. फिर, सरणी 'font.<font.family>' (यहां: font.serif) का मूल्यांकन किया गया है, और सभी फ़ॉन्ट्स की घोषणा लेटेक्स प्रीम्बल में जोड़ दी गई है। उन घोषणाओं के अलावा लाइन

    \renewcommand{\rmdefault}{pnc} 
    

    जो करने के लिए नई सदी स्कूल बुक which appears to be a bold version of Computer Modern Roman डिफ़ॉल्ट सेट करता है।

अंत में, समस्या को हल करने सबसे छोटा रास्ता font.serif स्थापित करने के लिए केवल कंप्यूटर आधुनिक रोमन को रोकने के लिए है:

font = {'family':'serif','size':16, 'serif': ['computer modern roman']} 

इस अतिरिक्त लाभ यह है कि यह सभी तत्वों के लिए काम करता है, यहां तक ​​कि है enter image description here


: गणित मोड का उपयोग कर गंदा चाल के बिना - लेबल और अन्य कैप्शन के लिए 10

साजिश उत्पन्न करने के लिए यहां पूरा कोड दिया गया है:

import matplotlib 
import matplotlib.pyplot as plt 
import numpy as np 

plt.rc('text',usetex=True) 
#font = {'family':'serif','size':16} 
font = {'family':'serif','size':16, 'serif': ['computer modern roman']} 
plt.rc('font',**font) 
plt.rc('legend',**{'fontsize':14}) 
matplotlib.rcParams['text.latex.preamble']=[r'\usepackage{amsmath}'] 

x = np.linspace(0,2*np.pi,100) 
y = np.sin(x) 

fig = plt.figure(figsize=(5,5)) 
p1, = plt.plot(x,y) 
p2, = plt.plot(x,x**2) 
plt.xlabel(r'$\text{this is the x-Axis}$') 
plt.ylabel('$y-Axis$') 
plt.legend([p1,p2],['Sin(x)','x$^2$']) 
plt.gcf().subplots_adjust(left=0.2) 
plt.gcf().subplots_adjust(bottom=0.15) 
plt.savefig('Test.eps',bbox_inches='tight',format='eps') 
plt.show() 
+0

क्या आप प्लॉट के लिए उपयोग किए गए कोड को पोस्ट कर सकते हैं? अगर मैं आपको सही ढंग से समझता हूं, तो सभी लेबल (अक्ष और किंवदंती) को '(' लेबल एंट्री ') के समान टाइप किया गया था और केवल गणित मोड प्रविष्टि वाई-लेबल '(' $ y-axis $ ') थी। यदि ऐसा है, तो यह एक अच्छा समाधान है! – Blink

+0

साजिश आपके कोड से बिल्कुल उत्पन्न हुई थी, केवल हाइलाइट की गई लाइन बदल दी गई थी! –

+0

@Blink कोड जोड़ा गया ... –

5

कैसे के बारे में:

enter image description here

import matplotlib.pyplot as plt 
import numpy as np 

plt.rc('text',usetex=True) 
font = {'family':'serif','size':16} 
plt.rc('font',**font) 
plt.rc('legend',**{'fontsize':14}) 

x = np.linspace(0,2*np.pi,100) 
y = np.sin(x) 

fig = plt.figure(figsize=(5,5)) 
p1, = plt.plot(x,y) 
p2, = plt.plot(x,x**2) 
plt.xlabel('$\mathrm{This is the }x\mathrm{-axis}$'.replace(' ','\: ')) 
plt.ylabel('$y\mathrm{-axis}$') 
plt.legend([p1,p2],['$\sin(x)$','$x^2$'], loc='best') 
fig.subplots_adjust(left=0.2, bottom=0.15) 
plt.savefig('Test.eps',bbox_inches='tight',format='eps') 
plt.show() 

यह

plt.xlabel('$\mathrm{This is the }x\mathrm{-axis}$'.replace(' ','\: ')) 

का उपयोग करता '\: ' साथ रिक्त स्थान को बदलने के लिए। हालांकि, टीएक्स गुरु इस पर ऑब्जेक्ट कर सकते हैं। यदि कोई बेहतर तरीका है तो आप TeX stackexchange पर पूछना चाहेंगे।

संबंधित मुद्दे