Matplotlib:将字体与本地路径一起使用时,图例fontsize不会更改

2024-03-28 23:03:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用python3.7,matplotlib来可视化图形上的多行。我的最终目标是只使图例字体的大小更小,但我想使用我的字体从同一文件夹我的代码是在

当我使用“mpl.rcParams['font.family']=font.get_name()”字体时,图例的字体确实变小了但是我不希望代码依赖于特定计算机字体中的文件,我希望它能够与特定字体一起工作,无论代码是否在我的计算机上,所以我使用本地路径

一切都显示正确,除了大小没有改变,无论我尝试

import pandas as pd
from datetime import datetime, timedelta
import matplotlib as mpl
from matplotlib import pyplot as plt
from matplotlib import dates as mpl_dates
from matplotlib.cm import get_cmap
import matplotlib.font_manager as font_manager
from cycler import cycler
from matplotlib.pyplot import figure
from collections import OrderedDict
from collections import Counter
from collections import defaultdict
from itertools import accumulate
import numpy as np


path = 'fonts/GT-America-Extended-Medium.OTF'
font = font_manager.FontProperties(fname=path)
pathofregularfont = "fonts/GT-America-Expanded-Regular.OTF"
fontregular = font_manager.FontProperties(fname=pathofregularfont)

plt.figure(figsize=(16,9))

cmap = get_cmap(name)   
colors = cmap.colors  
plt.rc('axes', prop_cycle=(cycler('color', colors)))

for index, user in zip(range(int(limit)), counted.keys()):
        print(index, user)
        listofdatesforeveryuser = list(reversed(dictofusersanddates.get(user)))
        counteddates = OrderedDict(Counter(listofdatesforeveryuser))
        cumulativecounts = list(accumulate(list(counteddates.values())))
        dateslist = [datetime.strptime(date, '%Y-%m-%d').date() for date in counteddates.keys()]
        print(user, dateslist)



        if int(limit) <= 17:

            plt.legend(prop=font)

        elif int(limit) > 17:

            plt.legend(prop=fontregular)
            mpl.rcParams["legend.fontsize"] = 6

        plt.step(dateslist, cumulativecounts, linestyle='solid', linewidth=0.5, label=(user + '\n' + str(counted.get(user)) + ' likes')) 

ax = plt.axes()
for label in ax.get_xticklabels():
    label.set_fontproperties(fontregular)
    #ax.set_fontproperties(font)
for label in ax.get_yticklabels():
    label.set_fontproperties(fontregular)
name = str(filename).replace('.csv','')
plt.savefig('schedules/Top ' + str(limit) + ' users for ' + name + '.png',dpi=600)

我试过(定位在plt.legend之前和之后,以及plt.step和plt.savefig之前):plt.legend(fontsize=6)

我试过(定位在plt.legend之前和之后,以及plt.step和plt.savefig之前):mpl.rcParams["legend.fontsize"] = 6plt.rcParams["legend.fontsize"] = 6

我试过(放在plt.legend之前,plt.step和plt.savefig之前):plt.rc('legend',fontsize='small')

我试过(放在plt.legend之后,plt.step和plt.savefig之前):plt.legend(fontsize=6)

我试过(放在plt.legend之后,plt.step和plt.savefig之前):plt.rc('legend',fontsize=6)

我在plt.step之后和plt.savefig之前也尝试过这些选项

字体仍然保持相同的大小,在某些情况下,如果我将fontsize=6语句放在plt.legend(prop=font)之后,它会选择matplotlib的默认字体和较小的字体,并且会忽略我指定的字体


Tags: fromimportforgetmatplotlibasstep字体