Python可视化:图中字体设置

Python可视化:图中字体设置
Python用于绘图还是非常方便的,利用matplotlib,可以实现很多的绘图需求,当然,如果想要一些自动设置的比较美观的图形默认设置,可以用sebornhttp://seaborn.pydata.org/,或者pyecharthttps://echarts.apache.org/examples/zh/index.html#chart-type-map
这里我们主要总结一下matplotlib中绘图时候的字体设置。

首先来简单的画一个散点图

import matplotlib.pyplotas plt import numpyas np x=10* np.random.rand(10) y=10* np.random.rand(10)''' x = array([7.34208212, 6.14229141, 6.99898899, 5.10833595, 7.66301418, 3.84463225, 2.97255304, 5.54680296, 2.07965563, 2.72611992]) ''' plt.scatter(x, y, marker='o', c='red', label='customer') plt.legend() plt.show()
结果如下:
这里我们并没有改变图例legend的字体,所以是默认字体。假如我们想要改成Arial字体,加粗,应该怎么做呢?首先来看一下scatter()函数的详细参数
plt.scatter( x,# x 坐标 y,# y 坐标 s=None,# The marker size in points**2 c=None,# color of nodes marker=None,# The marker style cmap=None,# Colormap norm=None,# Normalize vmin=None,# vmax=None,# alpha=None,# linewidths=None,# The linewidth of the marker edges verts=None,# edgecolors=None,# The edge color of the marker*, plotnonfinite=False, data=None,**kwargs,)

设置图中的字体的两种方法

用font字典的形式来设置

我们再来看一下legend的参数,legend()函数有一个参数为prop,解释如下
prop : None or :class:matplotlib.font_manager.FontPropertiesor dict
The font properties of the legend. If None (default), the current
:data:matplotlib.rcParamswill be used.
我们利用下面的代码,来设置图例legend的字体,代码如下
# 用这个来修改legend的字体,也可以用plt.rcParams['font.sans-serif']=['Arial']的方法,都可以 font={'family':'Arial'#'serif',# ,'style':'italic','weight':'bold'# 'normal'# ,'color':'red','size':20}# 注解边界的默认设置就是(x0,y0,width,height)=(0,0,1,1).# 左边,右边,顶边,底边# 对于四个元素的bbox_to_anchor(),也就是(x, y, width, height),情况就和上面两个元素的有所不同了。我们通过图来展示,会更清楚一点。# https://blog.csdn.net/chichoxian/article/details/101058046# https://blog.csdn.net/sinat_41299610/article/details/106494549?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param plt.legend(loc='upper left'# 就是指legend的box的左上角坐标是(0.1, 0.3), bbox_to_anchor=(0.05,0.9)# (x, y, width, height) (0, 0.5, 0.5, 0.5), prop= font, markerscale=2# legend里面的符号的大小)
运行结果如下:

用fontproperties参数来设置

设置横坐标和纵坐标坐标轴标题xlabel和ylabel的时候,可以用fontproperties这个参数来设置字体,如下面的代码
import numpyas np x=10* np.random.rand(10) y=10* np.random.rand(10)''' x = array([7.34208212, 6.14229141, 6.99898899, 5.10833595, 7.66301418, 3.84463225, 2.97255304, 5.54680296, 2.07965563, 2.72611992]) ''' plt.scatter(x, y, marker='o', c='red', label='customer') plt.xlabel("$x$ coor",fontproperties="STLiti") plt.ylabel("$y$ $m^2$",fontproperties="STXingkai") plt.title("$y = x$",fontproperties="STXinwei")# 用这个来修改legend的字体,也可以用plt.rcParams['font.sans-serif']=['Arial']的方法,都可以 font={'family':'Arial'#'serif',# ,'style':'italic','weight':'normal'# ,'color':'red','size':20} plt.legend(loc='upper left'# 就是指legend的box的左上角坐标是(0.1, 0.3), bbox_to_anchor=(0.05,0.9)# (x, y, width, height) (0, 0.5, 0.5, 0.5), prop= font, markerscale=2# legend里面的符号的大小)# plt.legend(loc = 'upper left', fontsize = 20) plt.show()
注意,坐标轴标题还支持LaTeX语法,比如在坐标轴上输入公式等的,都是可以的。

可选字体名称集合

我们可以通过输出matplotlib.font_manager.fontManager.ttflist中的字体来查看都可以设置哪些可选字体。
import matplotlib a=sorted([f.namefor fin matplotlib.font_manager.fontManager.ttflist]) previous_font=' ' count=0for font_namein a:if(font_name!= previous_font): count= count+1# print(font_name, '\t\t\t\t', end='')if(count>2):print('{:35}'.format(font_name), end='')if(count%4==0):print() previous_font= font_name
结果如下,也就是可以设置的字体可选集合