python - لوحة - تكبير خط متصفح الاندرويد




كيفية تغيير حجم الخط على مؤامرة matplotlib (6)

كيف يمكن للمرء تغيير حجم الخط لجميع العناصر (القراد ، والعلامات ، والعنوان) على مؤامرة matplotlib؟

أنا أعرف كيفية تغيير أحجام علامة التجزئة ، ويتم ذلك مع:

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

لكن كيف يغير الشخص الباقي؟


أتفق تمامًا مع الأستاذ هستر في أن أبسط طريقة للمضي قدمًا هي تغيير حجم الشكل ، مما يسمح بالحفاظ على الخطوط الافتراضية. أنا فقط كان يجب أن أكمل هذا بخيار bbox_inches عندما يحفظ الرقم ك pdf لأن قطع الشعارات قطعت.

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

إذا كنت ترغب في تغيير الخطوط حسب رسم محدد تم إنشاؤه بالفعل ، فجرّب ذلك:

import matplotlib.pyplot as plt

ax = plt.subplot(111, xlabel='x', ylabel='y', title='title')
for item in ([ax.title, ax.xaxis.label, ax.yaxis.label] +
             ax.get_xticklabels() + ax.get_yticklabels()):
    item.set_fontsize(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)

في ما يلي مقاربة مختلفة تمامًا تعمل بشكل مثير للدهشة لتغيير أحجام الخطوط:

تغيير حجم الشكل !

عادة ما أستخدم الكود مثل هذا:

import matplotlib.pyplot as plt
import numpy as np
[enter image description here][1]fig = plt.figure(figsize=(4,3))
ax = fig.add_subplot(111)
x = np.linspace(0,6.28,21)
ax.plot(x, np.sin(x), '-^', label="1 Hz")
ax.set_title("Oscillator Output")
ax.set_xlabel("Time (s)")
ax.set_ylabel("Output (V)")
ax.grid(True)
ax.legend(loc=1)
fig.savefig('Basic.png', dpi=300)

كلما كنت أصغر حجمًا ، كلما كان الخط أكبر بالنسبة إلى المخطط . هذا أيضا يرقى علامات. ملاحظة أيضاً تعيين dpi في dpi أو نقطة في البوصة. تعلمت هذا من خلال نشر منتدى AMTA (American Modeling Teacher of America). على سبيل المثال: الشكل من التعليمات البرمجية أعلاه


هذا هو امتداد لرد ماريوس Retegan. يمكنك إنشاء ملف 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": ""
}

تحديث: شاهد الجزء السفلي من الإجابة لطريقة أفضل قليلاً للقيام بذلك.
تحديث # 2: لقد برزت من تغيير الخطوط عنوان الأسطورة أيضا.
تحديث # 3: هناك خلل في Matplotlib 2.0.0 الذي يتسبب في علامات التجزئة لمحور لوغاريتمي للعودة إلى الخط الافتراضي. يجب أن تكون ثابتة في الإصدار 2.0.1 ولكني قمت بتضمين الحل في الجزء الثاني من الإجابة.

هذه الإجابة لأي شخص يحاول تغيير كافة الخطوط ، بما في ذلك وسيلة الإيضاح ، ولأي شخص يحاول استخدام خطوط وأحجام مختلفة لكل شيء. لا يستخدم rc (الذي لا يبدو للعمل بالنسبة لي). إنه أمر مرهق إلى حد ما ، لكنني لم أتمكن من التعامل مع أي طريقة أخرى بشكل شخصي. وهو يجمع أساسا بين الإجابة ryggyr هنا مع إجابات أخرى على SO.

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_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