暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Python Matplotlib 的一些常用的设置

狗头Rser 2021-09-17
1165

  最近在帮人做一些关于拟合的东西,虽然拟合没咋做出来,但是作图的好多东西就一下回忆起来了,主要是 Python 的 matplotlib 里的一些设置和 MATLAB 的一些设置都很像,就一下回忆起本科时候学习的一些东西了...反正也在下数据,就闲来写点东西。

#-*-coding:UTF-8 -*-
import numpy as np
import math
import matplotlib.pyplot as plt
from matplotlib import rcParams
from matplotlib.font_manager import FontProperties
#这个就当模板去用呗,省的总是查来查去的
plt.rcParams['axes.unicode_minus']=False


#设置字体
font = {'family': 'sans-serif',
'color': 'darkred',
'weight': 'normal',
'size': 20,
}
font1 = FontProperties(fname=r"c:\windows\fonts\simsun.ttc",
style='normal',
weight = 'bold',
size = 20)
title_font = FontProperties(fname=r"C:\Windows\fonts\times.ttf",
style = 'normal',
weight= 'bold',
size=40)


x = np.arange(-10,10,0.2)
y = 1./(1 + np.exp(-x))


# figure
# 绘图的设置
figure = plt.figure(figsize=(10,10),dpi=80,edgecolor='b')
figure.text(0.2,0.5,'中文测试',FontProperties = font1)
figure.text(0.6,0.5,r'y = $\dfrac{1}{1+e^{-x}}$',
color='b',
fontsize=20)
#坐标轴设置
ax = plt.gca()
#左右无框
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.spines['bottom'].set_position(('data',0)) #data表示通过值来设置x轴的位置,将x轴绑定在y=0的位置
ax.spines['left'].set_position(('axes',0.5))


#设置字体
plt.plot(x,y,'r--',linewidth=3)
plt.xlabel('x',fontsize=25,fontdict=font)
plt.ylabel('y',fontsize=25,fontdict=font)
locs, labels = plt.xticks()
plt.tick_params(direction='in')
plt.xticks(np.arange(-10, 10.1, step=2),fontsize=20)
plt.yticks(np.arange(0.1,1.01,step=0.2),fontsize=20)
plt.title(r'sigmoid function',fontsize=30,FontProperties=title_font,color='b')
plt.show()
plt.savefig("test.png")

也在补一些 DL 的基础呗,就看到这个 sigmoid 函数了,这个算 activate function ,用这个算出值之后再用交叉熵或者 softmax 计算损失函数。其实最关键的是想保留下这个 Python 的模板,发现 Python 的绘图和 MATLAB 很像,就是 figure - axes - children 属性。以前大多用 MATLAB 绘图,Python 用过几次,不大熟练,但是经常遇到几个问题,所以,就想记在公众号里,以备不时之需呗。

  1. 中文字体显示的问题 由于 Matplotlib 里面自带的字体库是不带中文字体的,所以需要去用一些方法去指向中文字体,例如:
font = {'family': 'sans-serif',
'color': 'darkred',
'weight': 'normal',
'size': 20,
}
title_font = FontProperties(fname=r"C:\Windows\fonts\times.ttf",
style = 'normal',
weight= 'bold',
size=40)
figure.text(0.2,0.5,'中文测试',FontProperties = font1)

  font-family 这个东西,像无衬线,打字机 balala 可以自己查一查,当时在 LaTeX 工作室实习的时候也没搞清楚,hhhh,weight
设置粗细,size
设置大小。

  fname 可以在命令窗口用 fc-list : > font.txt
输出,这个是 Linux 的命令,但是 Windows 照样适用。如果直接在命令窗口输出 fc-list
的话会导致中文字体的乱码,应该是 GBK 和 UTF-8 的编码问题。如果用 fc-list : > font.txt
就会把字体记录到一个 txt 文件中,然后中文就不会乱码(记得冒号前面后面还有 > 都有空格),这是刘海洋老师的 《LaTeX 入门》里讲的吧?如果想要查可用的中文字体的话可以用 fc-list :lang=zh > font1.txt
查看,当然记得切换到当前目录去找,要不然很多人可能不大熟练 Linux、Mac 那一套切换。

当然要看清楚用 rcParams
还是用 FontProperties
,然后坐标轴由于设置了字体会导致负号消失,用 plt.rcParams['axes.unicode_minus']=False
去控制。

  1. LaTeX 公式的显示:
figure.text(0.6,0.5,r'y = $\dfrac{1}{1+e^{-x}}$',
color='b',
fontsize=20)

这个记得加上行间模式就行?美刀配对,记得 r
防止字符转义,因为 LaTeX 好多 \
开头的。

  1. 坐标轴的设置
ax = plt.gca()
#左右无框
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')

  先拿到当前 gca 的句柄,然后设置脊线的颜色为空。设置坐标轴的中心:

ax.spines['bottom'].set_position(('data',0))  #data表示通过值来设置x轴的位置,将x轴绑定在y=0的位置
ax.spines['left'].set_position(('axes',0.5))
  1. 保存图像:
plt.savefig(fname, dpi=None, facecolor='w', edgecolor='w',
orientation='portrait', papertype=None, format=None,
transparent=False, bbox_inches=None, pad_inches=0.1,
frameon=None, metadata=None)

官网给的 doc ,主要是 bbox_inches
是否设置 tight
属性,因为很多时候出图会有很大的留白,所以需要控制,和 MATLAB 一样。

也就是随便记录玩玩,看看而已,就当成个模板库备着。



文章转载自狗头Rser,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论