python - Matplotlib साजिश पर फ़ॉन्ट आकार कैसे बदलें




font-size (6)

Matplotlib साजिश पर सभी तत्वों (टिक, लेबल, शीर्षक) के लिए फ़ॉन्ट आकार कैसे बदलता है?

मुझे पता है कि टिक लेबल आकार कैसे बदलें, यह इस प्रकार किया जाता है:

import matplotlib 
matplotlib.rc('xtick', labelsize=20) 
matplotlib.rc('ytick', labelsize=20) 

लेकिन बाकी कैसे बदलता है?


उपर्युक्त सामग्री के आधार पर:

import matplotlib.pyplot as plt
import matplotlib.font_manager as fm

fontPath = "/usr/share/fonts/abc.ttf"
font = fm.FontProperties(fname=fontPath, size=10)
font2 = fm.FontProperties(fname=fontPath, size=24)

fig = plt.figure(figsize=(32, 24))
fig.text(0.5, 0.93, "This is my Title", horizontalalignment='center', fontproperties=font2)

plot = fig.add_subplot(1, 1, 1)

plot.xaxis.get_label().set_fontproperties(font)
plot.yaxis.get_label().set_fontproperties(font)
plot.legend(loc='upper right', prop=font)

for label in (plot.get_xticklabels() + plot.get_yticklabels()):
    label.set_fontproperties(font)

मैं प्रोफेसर हस्टर से पूरी तरह से सहमत हूं कि आगे बढ़ने का सबसे आसान तरीका आकृति के आकार को बदलना है, जो डिफ़ॉल्ट फोंट को रखने की अनुमति देता है। पीडीएफ के रूप में आंकड़े को सहेजते समय मुझे बस bbox_inches विकल्प के साथ पूरक करना पड़ा क्योंकि धुरी लेबल काटा गया था।

import matplotlib.pyplot as plt
plt.figure(figsize=(4,3))
plt.savefig('Basic.pdf', bbox_inches='tight')

यदि आप मेरे जैसे नियंत्रण सनकी हैं, तो आप अपने सभी फ़ॉन्ट आकारों को स्पष्ट रूप से सेट करना चाहते हैं:

import matplotlib.pyplot as plt

SMALL_SIZE = 8
MEDIUM_SIZE = 10
BIGGER_SIZE = 12

plt.rc('font', size=SMALL_SIZE)          # controls default text sizes
plt.rc('axes', titlesize=SMALL_SIZE)     # fontsize of the axes title
plt.rc('axes', labelsize=MEDIUM_SIZE)    # fontsize of the x and y labels
plt.rc('xtick', labelsize=SMALL_SIZE)    # fontsize of the tick labels
plt.rc('ytick', labelsize=SMALL_SIZE)    # fontsize of the tick labels
plt.rc('legend', fontsize=SMALL_SIZE)    # legend fontsize
plt.rc('figure', titlesize=BIGGER_SIZE)  # fontsize of the figure title

ध्यान दें कि आप matplotlib पर matplotlib विधि को कॉल करने वाले आकार भी सेट कर सकते हैं:

import matplotlib

SMALL_SIZE = 8
matplotlib.rc('font', size=SMALL_SIZE)
matplotlib.rc('axes', titlesize=SMALL_SIZE)

# and so on ...

यह Marius Retegan answer विस्तार है। आप अपने सभी संशोधनों के साथ एक अलग JSON फ़ाइल बना सकते हैं और इसे rcParams.update से लोड कर सकते हैं। यह परिवर्तन केवल वर्तमान स्क्रिप्ट पर लागू होंगे। इसलिए

import json
from matplotlib import pyplot as plt, rcParams

s = json.load(open("example_file.json")
rcParams.update(s)

और उसी फ़ोल्डर में 'example_file.json' को सहेजें।

{
  "lines.linewidth": 2.0,
  "axes.edgecolor": "#bcbcbc",
  "patch.linewidth": 0.5,
  "legend.fancybox": true,
  "axes.color_cycle": [
    "#348ABD",
    "#A60628",
    "#7A68A6",
    "#467821",
    "#CF4457",
    "#188487",
    "#E24A33"
  ],
  "axes.facecolor": "#eeeeee",
  "axes.labelsize": "large",
  "axes.grid": true,
  "patch.edgecolor": "#eeeeee",
  "axes.titlesize": "x-large",
  "svg.fonttype": "path",
  "examples.directory": ""
}

Matplotlib दस्तावेज से ,

font = {'family' : 'normal',
        'weight' : 'bold',
        'size'   : 22}

matplotlib.rc('font', **font)

यह सभी वस्तुओं का फ़ॉन्ट kwargs ऑब्जेक्ट, font द्वारा निर्दिष्ट फ़ॉन्ट पर सेट करता है।

वैकल्पिक रूप से, आप इस उत्तर में सुझाए गए rcParams update विधि का भी उपयोग कर सकते हैं:

matplotlib.rcParams.update({'font.size': 22})

आप अनुकूलन matplotlib पृष्ठ पर उपलब्ध गुणों की पूरी सूची पा सकते हैं।


अद्यतन: इसे करने के थोड़ा बेहतर तरीके के लिए उत्तर के नीचे देखें।
अद्यतन # 2: मैंने चित्रकारी शीर्षक फ़ॉन्ट्स को भी बदल दिया है।
अद्यतन # 3: Matplotlib 2.0.0 में एक बग है जो डिफ़ॉल्ट फ़ॉन्ट पर वापस जाने के लिए लॉगरिदमिक अक्षों के लिए टिक लेबल का कारण बन रहा है। 2.0.1 में तय किया जाना चाहिए लेकिन मैंने जवाब के दूसरे भाग में वर्कअराउंड शामिल किया है।

यह उत्तर किसी भी व्यक्ति के लिए सभी फोंट को बदलने की कोशिश कर रहा है, जिसमें किंवदंती शामिल है, और प्रत्येक व्यक्ति के लिए अलग-अलग फ़ॉन्ट्स और आकारों का उपयोग करने की कोशिश करने वाले किसी भी व्यक्ति के लिए। यह आरसी का उपयोग नहीं करता है (जो मेरे लिए काम नहीं करता है)। यह बल्कि बोझिल है लेकिन मैं व्यक्तिगत रूप से किसी अन्य विधि के साथ पकड़ नहीं पा रहा था। यह मूल रूप से एसओ पर अन्य उत्तरों के साथ ryggyr के जवाब को जोड़ती है।

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

# Set the font dictionaries (for plot title and axis titles)
title_font = {'fontname':'Arial', 'size':'16', 'color':'black', 'weight':'normal',
              'verticalalignment':'bottom'} # Bottom vertical alignment for more space
axis_font = {'fontname':'Arial', 'size':'14'}

# Set the font properties (for use in legend)   
font_path = 'C:\Windows\Fonts\Arial.ttf'
font_prop = font_manager.FontProperties(fname=font_path, size=14)

ax = plt.subplot() # Defines ax variable by creating an empty plot

# Set the tick labels font
for label in (ax.get_xticklabels() + ax.get_yticklabels()):
    label.set_fontname('Arial')
    label.set_fontsize(13)

x = np.linspace(0, 10)
y = x + np.random.normal(x) # Just simulates some data

plt.plot(x, y, 'b+', label='Data points')
plt.xlabel("x axis", **axis_font)
plt.ylabel("y axis", **axis_font)
plt.title("Misc graph", **title_font)
plt.legend(loc='lower right', prop=font_prop, numpoints=1)
plt.text(0, 0, "Misc text", **title_font)
plt.show()

इस विधि का लाभ यह है कि, कई फ़ॉन्ट शब्दकोशों के साथ, आप विभिन्न शीर्षकों के लिए विभिन्न फोंट / आकार / वजन / रंग चुन सकते हैं, टिक लेबल के लिए फ़ॉन्ट चुन सकते हैं और सभी स्वतंत्र रूप से किंवदंती के लिए फ़ॉन्ट चुन सकते हैं।

अद्यतन करें:

मैंने थोड़ा अलग, कम अव्यवस्थित दृष्टिकोण तैयार किया है जो फ़ॉन्ट शब्दकोशों से दूर है, और आपके सिस्टम पर भी किसी भी फ़ॉन्ट को अनुमति देता है, यहां तक ​​कि .otf फोंट भी। प्रत्येक चीज़ के लिए अलग-अलग फोंट रखने के लिए, बस चर font_prop तरह अधिक font_path और font_prop लिखें।

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.font_manager as font_manager
import matplotlib.ticker
# Workaround for Matplotlib 2.0.0 log axes bug https://github.com/matplotlib/matplotlib/issues/8017 :
matplotlib.ticker._mathdefault = lambda x: '\\mathdefault{%s}'%x 

# Set the font properties (can use more variables for more fonts)
font_path = 'C:\Windows\Fonts\AGaramondPro-Regular.otf'
font_prop = font_manager.FontProperties(fname=font_path, size=14)

ax = plt.subplot() # Defines ax variable by creating an empty plot

# Define the data to be plotted
x = np.linspace(0, 10)
y = x + np.random.normal(x)
plt.plot(x, y, 'b+', label='Data points')

for label in (ax.get_xticklabels() + ax.get_yticklabels()):
    label.set_fontproperties(font_prop)
    label.set_fontsize(13) # Size here overrides font_prop

plt.title("Exponentially decaying oscillations", fontproperties=font_prop,
          size=16, verticalalignment='bottom') # Size here overrides font_prop
plt.xlabel("Time", fontproperties=font_prop)
plt.ylabel("Amplitude", fontproperties=font_prop)
plt.text(0, 0, "Misc text", fontproperties=font_prop)

lgd = plt.legend(loc='lower right', prop=font_prop) # NB different 'prop' argument for legend
lgd.set_title("Legend", prop=font_prop)

plt.show()

उम्मीद है कि यह एक व्यापक जवाब है







font-size