Python 更改Matplotlib图形上的标签(例如,更改为Muli)

Python 更改Matplotlib图形上的标签(例如,更改为Muli),python,matplotlib,fonts,Python,Matplotlib,Fonts,因此,我有以下代码: 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_

因此,我有以下代码:

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)。我无法确定我做错了什么:

同样适用于通过
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)
导入matplotlib.pyplot作为plt
%matplotlib内联
将matplotlib.pyplot作为plt导入
组的大小=[12,11,30,3]
颜色=['#F92969'、'#FACA0C'、'#17C37B'、'#D9DFEB']
plt.rcParams['font.family']=“无衬线”
plt.rcParams['font.serif']=['Muli']+plt.rcParams['font.sans serif']
plt.rcParams['font.size']=15
plt.bar(高度=组的大小,x=['a','b','c','d'],颜色=颜色,宽度=0.95,标签=['1',2,3,4])pct距离和标签距离更改标签位置。
#使用plt.text放置标签,将字体设置为我想要的字体(Muli):
对于v,枚举中的i(组的大小):
如果i>5:
plt.text(v-0.05,i-2.75,str(v),color='white',fontwweight='bold',fontdict=None)

如果我我认为您需要确保已将muli安装为系统字体。

要获取已安装字体的列表,您可以执行以下操作

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']
无衬线
而不是
衬线

这样做并运行你的代码,我得到

有关字体的详细信息,请尝试

sorted([i for i in matplotlib.font_manager.fontManager.ttflist], key=lambda i: i.name)

非常感谢你指出了正确的方向!我现在唯一的问题是字体的“重量”(粗体)似乎无法更改。它似乎停留在半斜体的字体上,而我想要的变体是粗体的。@Yeahprettymuch如果您尝试我添加到编辑中的命令,我怀疑Muli的文件名中包含“VariableFont”?如果是这种情况,那么我认为你需要你想要使用的字体的静态版本