فهرست
اسم و اندازه فونت
برای ترسیم تغییرات دادههای شاخص کل تورم با استفاده از کد زیر نمودار مورد نظرمان را رسم کردهایم. سطرهای 16 و 17 برای تنظیم فونت به کار گرفته شدهاند.
import matplotlib.pyplot as plt
import pandas as pd
# reading the data
d = pd.read_excel('D:/.../iran_statscenter_inflation_m12m.xlsx')
# replacing nan year with float
for i in range(1, d.shape[1]):
if pd.isna(d.iloc[0, i]):
d.iloc[0, i] = d.iloc[0, i-1] + 1/12
# plotting
plt.clf()
plt.figure(figsize = (10, 6))
font = {'family': 'Garamond', 'size': 21}
plt.rc('font', **font)
plt.plot(year, inflation)
plt.xticks([x for x in range(1382, 1403, 2)])
plt.yticks([x for x in range(10, 60, 10)],
[str(x) + '%' for x in range(10, 60, 10)])
plt.savefig('D:/.../inflation_total_fa0.png')

در نمودار فوق از از فونت Garamond با اندازه 30 استفاده شده است. font**
کلیدهای دیکشنری font را به عنوان متغیرهای ورودی و مقدارهای دیکشنری را به عنوان مقدارهای ورودی به متد rc
میدهد. این شیوه کدنویسی عملکردی مشابه دستور زیر است.
plt.rc(group = 'font', family = 'Garamond', size = 21)
فونت فارسی
با متد title
و ylabel
عبارات 'شاخص کل'
و 'نرخ تورم'
را به عنوان تیتر کلی و تیتر محور عمودی نمودار درج کردهایم و فونت را از 'Garamond'
به 'B Mitra'
تغییر دادیم. در نظر داشته باشید پایتون تنها به فونتهایی که قبل از نصبش در کامپیوتر وجود داشته دسترسی دارد.
plt.clf()
plt.figure(figsize = (10, 6))
font = {'family': 'B Mitra', 'size': 21}
plt.rc('font', **font)
plt.plot(year, inflation)
plt.xticks([x for x in range(1382, 1403, 2)])
plt.yticks([x for x in range(10, 60, 10)],
[str(x) + '%' for x in range(10, 60, 10)])
plt.ylabel('نرخ تورم')
plt.title('شاخص کل تورم')
plt.savefig('D:/.../inflation_total_fa0.png')

این تغییرات اعداد را با موفقیت به فونت فارسی تبدیل کردند. اما در نمایش متن فارسی دچار اشکال شدهاند، چرا که حروف جدا جدا و برعکس روی نمودار درج شده است.
این مشکل با فراخوانی دو کتابخانه arabic_reshaper و bidi.algorithm قابل حل است. توابع این دو کتابخانه متنهای فارسی و عربی را به گونهای تغییر میدهد که هنگام درج روی نمودار به شکل قابل قبولی مشاهده شوند. آنچه از این دو کتابخانه مورد نیاز است را در تابع text_fa
فراخوانی میکنیم تا هر زمان متن فارسی لازم به چاپ روی نمودار بود از این تابع استفاده کنیم.
import arabic_reshaper
import bidi.algorithm
def text_fa(x):
x = arabic_reshaper.reshape(x)
x = bidi.algorithm.get_display(x)
return x
تمامی متنهای فارسی که قرار است روی نمودار نمایش داده شود لازم است با این تابع پردزاش شود. به سطرهای 12 و 13 در کد زیر نگاه کنید.
plt.clf()
plt.figure(figsize = (10, 6))
font = {'family' : 'B Mitra', 'size' : 21}
plt.rc('font', **font)
plt.plot(year, inflation, linewidth = 3)
plt.xticks([x for x in range(1382, 1403, 2)])
plt.yticks([x for x in range(10, 60, 10)],
[str(x) + '%' for x in range(10, 60, 10)])
plt.ylabel(text_fa('نرخ تورم'))
plt.title(text_fa('شاخص کل تورم'))
plt.savefig('D:/.../inflation_total_fa1.png')

سایر تنظیمات
تمامی تنظیمات مورد نیاز در کتابخانه matplotlib قابل اعمال است. مثلا فرض کنید میخواهیم فاصله عنوان نمودار را با کادر منحنی بیشتر کنیم. این کار با rcParams
زیر امکانپذیر است. 22 تعداد پیکسلی است که برای فاصلهگذاری تعیین شده است.
plt.rcParams['axes.titlepad'] = 22
برای تغییرات دیگر نیز با جستجو در اینترنت میتوانیم دستور مورد نیاز برای تغییر مورد نظرمان را پیدا کنیم.