关于使用matplotlib进行坐标绘图时无法正确使用全局Times New Roman以及更改为斜体后显示为其他字体——————保证新罗马字体在XY轴标题中的正确输出

首先开门见山 源代码如下:

import numpy as np
import matplotlib
import matplotlib.pyplot as plt

from PIL.ImageColor import colormap
from matplotlib import ticker
from matplotlib.pyplot import title, axhline, xlabel, figure
from numpy.core.defchararray import lower
from pyparsing import alphas
from matplotlib import rcParams


#这句设置全体为新罗马字体,单单设置这一句无法使得XY轴标题输出为新罗马字体
plt.rc('font',family='Times New Roman')


#设置以下代码
plt.rcParams.update({'font.size': 15}) #设置字体大小 非硬性
plt.rcParams['mathtext.default']='regular' #设置数学文本为常规格式,硬性
matplotlib.rcParams['pdf.fonttype'] = 42 #矢量嵌入,非硬性
matplotlib.rcParams['ps.fonttype'] = 42 #矢量嵌入,非硬性





#准备数据
x_data=[0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9]
y_data=[1,0.7,0.59,0.85,0.83,0.72,0.55,0.60,0.82]



#定义坐标轴范围
plt.xlim(0,0.95)
plt.ylim(0.4,1.0)

#创立柱状图
for i in range(len(x_data)):
    plt.bar(x_data[i],y_data[i],color='lightseagreen',alpha=1,width=0.03)

#分割X轴
new_ticks=np.linspace(0.1,0.9,9)
print(new_ticks)
plt.xticks(new_ticks)

#定义横向显示网格线
ax=plt.gca()
ax.yaxis.grid(color='gray', linestyle='-', linewidth=0.5,alpha=0.2)

#设置框为黑色
ax.spines['right'].set_color('black')
ax.spines['left'].set_color('black')
ax.spines['top'].set_color('black')
ax.spines['bottom'].set_color('gray')

#定义横纵坐标轴名称
plt.xlabel("\u03B1_d",color='black',style='italic')
plt.ylabel("$t_d$",color='black',fontdict={'family': 'Times New Roman',  'style': 'italic', 'size': 13})

#设置刻度向内,同时设置颜色,起到隐藏的效果
ax.tick_params("x", which='major', direction='in',color='lightseagreen')  # "y", 'x', 'both'
ax.tick_params("y", which='major', direction='in')

#定义标题
plt.title("DownLoad Speed",fontproperties='Times New Roman')
#展示
plt.show()






为了方便解决更多代码,如下说明问题并给出一种方法:

一、首先是库的引用

import numpy as np
import matplotlib
import matplotlib.pyplot as plt

from PIL.ImageColor import colormap
from matplotlib import ticker
from matplotlib.pyplot import title, axhline, xlabel, figure
from numpy.core.defchararray import lower
from pyparsing import alphas
from matplotlib import rcParams

这是绘制柱状图折线图时普遍使用的一些库以及引用,如果需要绘制简单图表,可以直接复制下来.

如果您有其他需要可以再引用其他的,这里不做过多解释

二、设置字体,这里很多人都出了问题,导致Times New Roman无法全局设置,这里给出设置

#这句设置全局为新罗马字体,仅设置这一句无法使得x or y label()标题输出为新罗马字体
plt.rc('font',family='Times New Roman')


#设置以下代码
plt.rcParams.update({'font.size': 15}) #设置字体大小 非硬性
plt.rcParams['mathtext.default']='regular' #设置数学文本为常规格式,硬性
matplotlib.rcParams['pdf.fonttype'] = 42 #矢量嵌入,非硬性
matplotlib.rcParams['ps.fonttype'] = 42 #矢量嵌入,非硬性

1、首先通过plt.rc()来设置全局为Times New Roman 但是使用时无法使得xlabel() ylabel()标题正确显示为新罗马字体

2、其次使用设置数学文本为常规格式,防止label() 中希腊符号以及英文字母无法正确显示为Times New Roman

其中声明的非硬性指在Pycharm中输出预览图像不受影响

中间过渡数据新手可以参考上方我的注释,这里不做过多解释

三、其次说明一些细节问题与设置

1、发现\u03B1_d会错误输出为{\alpha}\_d但是我们都知道 输出的格式应该是\alpha _d才对,这是由于italic是强制进行输出,导致_同样被包括进入里面
plt.xlabel("\u03B1_d",color='black',style='italic')
2、如果使用$来取代italic的作用,那么会在输出中发现Times New Roman字体无法正常输出,达不到理想的效果
plt.xlabel('$\u03B1_d$',color='black')

而同时使用 $ $ 和italic便可以解决问题,这里给出两种方式: 

plt.xlabel('$\u03B1_d$',color='black',style='italic')

#or

plt.ylabel("$t_d$",color='black',fontdict={'family': 'Times New Roman',  'style': 'italic', 'size': 13})

但是需要注意的是,如果仅仅想要   xlabel()  ,  ylabel()   为Times New Roman字体,同时不设置全局字体为imes New Roman,那么需要采用上方的第二种方式

                                ———因为第一种方式在不声明全局Times New Roman的情况下依旧会导致无法正确设置———

文章输出最终图像如下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值