matplotlib 是Python的绘图库,很强大,很好用
提供一下下载:
pip3 install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple
用matplotlib 做图时候,有时候会写汉字,但是这个时候会乱码,解决办法我用了两种
1.fname 为 你下载的字体库路径,注意 c:\windows\fonts\simsun.ttc 字体的路径
from matplotlib.font_manager import FontProperties
font_set = FontProperties(fname=r"c:\\windows\\fonts\simsun.ttc", size=12)
2.这个是使用系统的字体
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 中文显示
mpl.rcParams['axes.unicode_minus'] = False # 负号显示
这两种办法基本 可以解决你的问题了
下面介绍一下里面的做图
简单的直线图
x = np.arange(1,11)
y = 2 * x + 5
plt.title("Matplotlib test")
plt.xlabel("x axis caption")
plt.ylabel("y axis caption")
plt.plot(x,y)
plt.show()
这是最基本的应用方式,show()这个函数 是直接显示,或者不想展示,可以用savefig(),不过里面的参数就需要填写path了。
Axes 翻译成中文是轴域/子图。Axes 是带有数据的图像区域
fig = plt.figure() # 创建一个没有 axes 的 figure
fig.suptitle('No axes on this figure') # 添加标题以便我们辨别
fig, ax_lst = plt.subplots(2, 2) # 创建一个以 axes 为单位的 2x2 网格的 figure
plt.show()
绘制曲线图:
x = np.linspace(-2, 6, 50)
y1 = x + 3 # 曲线 y1
y2 = 3 - x # 曲线 y2
plt.figure() # 定义一个图像窗口
plt.plot(x, y1) # 绘制曲线 y1
plt.plot(x, y2) # 绘制曲线 y2
plt.show()
调用np.linspace是创建一个 numpy 数组,并记作 x。x 包含了从 -2 到 6 之间等间隔的 50 个值。y1 和 y2 则分别是这 50 个值对应曲线的函数值组成的 numpy 数组。前面的操作还处于设置属性的阶段,还没有开始绘制图形。plt.figure() 函数才意味着开始执行绘图操作,然后调用show()显示。
对图进行简单的修饰
# 创建一个点数为 8 x 6 的窗口, 并设置分辨率为 80像素/每英寸
plt.figure(figsize=(8, 6), dpi=80)
# 再创建一个规格为 1 x 1 的子图
plt.subplot(111)
x = np.linspace(-2, 6, 50)
y1 = x + 3 # 曲线 y1
y2 = 3 - x # 曲线 y2
# 绘制颜色为蓝色、宽度为 1 像素的连续曲线 y1
plt.plot(x, y1, color="blue", linewidth=1.0, linestyle="-")
# 绘制颜色为紫色、宽度为 2 像素的不连续曲线 y2
plt.plot(x, y2, color="#800080", linewidth=2.0, linestyle="--")
# 设置横轴的上下限
plt.xlim(-1, 6)
# 设置纵轴的上下限
plt.ylim(-2, 10)
plt.show()
如果需要在图的左上角添加一个图例。我们只需要在 plot() 函数里以「键 - 值」的形式增加一个参数。首先我们需要在绘制曲线的时候,增加一个 label 参数,然后再调用 plt.legend() 绘制出一个图例。plt.legend() 需要传入一个位置值。loc 的值可选如下:
值说明
best自动选择最佳位置,默认是左上
upper right右上
upper left左上
lower right右下
lower left左下
right右边,默认是右上。如果因图形挡住右上,会自动往下选择空白地方绘制
center right垂直居中且靠右
center left垂直居中且靠左
lower center垂直居中且靠底部
upper center垂直居中且靠顶部
center居中
以上,基本满足最基本的做图要求。
原文链接:https://blog.csdn.net/qq_38999426/article/details/108274857