Изменение меток на графиках Matplotlib (например, на Muli) - PullRequest
2 голосов
/ 11 февраля 2020

Итак, у меня есть следующий код:

import matplotlib.pyplot as plt
%matplotlib inline

# Following should supposedly set the font correctly:
plt.rcParams['font.family'] = 'sans-serif'
plt.rcParams['font.serif'] = ['Muli'] + plt.rcParams['font.serif']

# create data
size_of_groups=[12,11,30,3]


colors = ['#F92969','#FACA0C','#17C37B','#D9DFEB']

# Create a pieplot
my_pie,_,texts = plt.pie(size_of_groups,radius = 1.2,colors=colors,autopct="%.1f%%",
textprops = {'color':'w',                                                                                           'size':15,                                                                                                'weight':'bold'}, pctdistance=0.75, labeldistance=0.7) #pctdistance and labeldistance change label positions.


plt.setp(my_pie, width=0.6, edgecolor='white') 
fig1 = plt.gcf()
fig1.show()

Однако, выполнение этого кода не дает правильный шрифт (Muli). Я не могу определить, что я делаю неправильно: img

То же самое относится к меткам с помощью метода plt.text.

Следующий код генерирует гистограммы:

import matplotlib.pyplot as plt

%matplotlib inline
import matplotlib.pyplot as plt

size_of_groups=[12,11,30,3]

colors = ['#F92969','#FACA0C','#17C37B','#D9DFEB']

plt.rcParams['font.family'] = 'sans-serif'
plt.rcParams['font.serif'] = ['Muli'] + plt.rcParams['font.sans-serif']
plt.rcParams['font.size'] = 15



plt.bar(height=size_of_groups,x=['a','b','c','d'],color=colors,width=0.95,label=['1',2,3,4]) #pctdistance and labeldistance change label positions.

# Setting the font to what I want it to be (Muli), using plt.text to place labels:

for v,i in enumerate(size_of_groups):
    if i > 5:
        plt.text(v-0.05,i-2.75,str(v),color='white',fontweight='bold',fontdict=None)
    if i <= 5:
        plt.text(v-0.05,i+0.8,str(v),color='gray',fontweight='bold',fontdict=None)

Еще раз, я получаю очень симпатичный график, но не совсем правильный шрифт:

img2

Так что мой вопрос в том, что именно мне кажется не хватает того, что делает это, поэтому я не вижу шрифт, который я хочу.

Ответы [ 2 ]

3 голосов
/ 11 февраля 2020

Чтобы получить список установленных шрифтов, вы можете сделать

import matplotlib.font_manager
sorted({i.name for i in matplotlib.font_manager.fontManager.ttflist})

, если нужного вам шрифта (Muli) нет, тогда отследить ваш файл списка шрифтов (для меня это ~/.matplotlib/fontlist-v300.json ) и удалите его. Повторите приведенную выше команду еще раз и посмотрите, появилась ли она сейчас.

Также вы, вероятно, хотите иметь

plt.rcParams['font.sans-serif'] = ['Muli'] + plt.rcParams['font.sans-serif']

(sans-serif вместо serif)

При выполнении этого кода и выполнении кода я получаю the result

Для более подробной информации о ваших шрифтах попробуйте

sorted([i for i in matplotlib.font_manager.fontManager.ttflist], key=lambda i: i.name)
0 голосов
/ 11 февраля 2020

Я думаю, вам нужно убедиться, что у вас установлен muli как системный шрифт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...