最近在写论文,遇到一些函数图像需要自己画,在matplot官网上找到一个例子,在此基础上进行修改。
from mpl_toolkits.axisartist.axislines import SubplotZero
import matplotlib.pyplot as plt
plt.rc('font', family='Times New Roman')
plt.rcParams['savefig.dpi'] = 300 #图片像素
plt.rcParams['figure.dpi'] = 300 #分辨率
import numpy as np
font1 = {'family' : 'Times New Roman',
'weight' : 'normal',
'size' : 100,
}
fig = plt.figure(figsize=(10, 10))
#创建绘图区对象
ax = SubplotZero(fig, 111)
#将绘图区对象添加到画布
fig.add_subplot(ax)
#设置新的坐标轴,但这两行没有也不影响
#ax.axis["xzero"] = ax.new_floating_axis(0,0)
#ax.axis["yzero"] = ax.new_floating_axis(1,0)
# 在坐标轴末尾添加箭头
ax.axis["xzero"].set_axisline_style("->", size=2.5)
ax.axis["yzero"].set_axisline_style("->", size=2.5)
# 使新的坐标轴显示
ax.axis["xzero"].set_visible(True)
ax.axis["yzero"].set_visible(True)
#把上下左右的边界去掉
for direction in ["left", "right", "bottom", "top"]:
# hides borders
ax.axis[direction].set_visible(False)
x = np.arange(-4.5, 4.5, 0.01)
y1 = np.where(x<0, 0, x)
y2 = np.where(x<0, 0.1*x, x)
y3 = np.where(x<0, 0.3*(np.exp(x)-1), x)
y4 = x*np.tanh(np.log(1+np.exp(x)))
#设置刻度值的位置,这里设置为x轴下面,y轴左边
ax.axis["xzero"].set_axis_direction("bottom")
ax.axis["yzero"].set_axis_direction("left")
#设置x、y坐标轴的范围
plt.xlim(-5,5)
plt.ylim(-5,5)
#设置x轴和y轴标签
#plt.xlabel('x', font1)
#plt.ylabel('y', fontsize=100, c='g')
#设置刻度值的字号,注意一下,我对labelsize进行修改,但刻度值字号大小并没有变化,不知道什么情况
#plt.tick_params(labelsize=100)
ax.plot(x, y1)
ax.plot(x, y2)
ax.plot(x, y3)
ax.plot(x, y4)
#plt.savefig('mish2.png', dpi=300)
plt.show()
最终所画出的图像如下:
该程序存在两个小问题,
1.在我把x标签添加上之后,会出现两个x;
2.无法调整刻度值的字号。
然后在网上找到了一个在线画函数图像的工具:desmos,绘图功能十分强大,强烈推荐,而且看了介绍可以画很多好看的图,值得去好好发掘一下。附上我在上面画的一个函数图像:
相较而言,desmos画函数图像更加简单,只要把函数方程打在网页上,自动生成函数图像,左上角可以进行各种调整(如x、y的范围,是否在坐标轴上加箭头等)。
desmos网站链接如下:
https://www.desmos.com/calculator
python程序参考官方链接:
https://matplotlib.org/gallery/axisartist/demo_axisline_style.html#sphx-glr-gallery-axisartist-demo-axisline-style-py