关于matplotlib的后端(Backend)

2024-05-25 22:38
文章标签 matplotlib backend

本文主要是介绍关于matplotlib的后端(Backend),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

主要是在看《深入理解TensorFlow 架构设计与实现原理》遇到的问题,其中第3章有一段源码。

# -*- coding=utf-8 -*-
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np# 打印日志的步长
log_step = 50
# ================ 1.定义超参数 ================
# 学习率
learning_rate = 0.01
# 最大训练步数
max_train_steps = 1000
# ================ 2.输入数据 ================
# 构造训练数据
train_X = np.array([[3.3],[4.4],[5.5],[6.71],[6.93],[4.168],[9.779],[6.182],[7.59],[2.167],[7.042],[10.791],[5.313],[7.997],[5.654],[9.27],[3.1]], dtype=np.float32)
train_Y = np.array([[1.7],[2.76],[2.09],[3.19],[1.694],[1.573],[3.366],[2.596],[2.53],[1.221],[2.827],[3.465],[1.65],[2.904],[2.42],[2.94],[1.3]], dtype=np.float32)
total_samples = train_X.shape[0]
# ================ 3.构建模型 ================
# 输入数据
X = tf.placeholder(tf.float32, [None, 1])
# 模型参数
W = tf.Variable(tf.random_normal([1, 1]), name="weight")
b = tf.Variable(tf.zeros([1]), name="bias")
# 推理值
Y = tf.matmul(X, W) + b
# ================ 4.定义损失函数 ================
# 实际值
Y_ = tf.placeholder(tf.float32, [None, 1])
# 均方差
loss = tf.reduce_sum(tf.pow(Y-Y_, 2))/(2*total_samples)
# ================ 5.创建优化器 ================
# 随机梯度下降优化器
optimizer = tf.train.GradientDescentOptimizer(learning_rate)
# ================ 6.定义单步训练操作 ================
# 最小化损失值
train_op = optimizer.minimize(loss)
# ================ 7.创建会话 ================
with tf.Session() as sess:# 初始化全局变量sess.run(tf.global_variables_initializer()) 
# ================ 8.迭代训练 ================print("Start training:")for step in xrange(max_train_steps):sess.run(train_op, feed_dict={X: train_X, Y_: train_Y})# 每隔log_step步打印一次日志if step % log_step == 0:c = sess.run(loss, feed_dict={X: train_X, Y_:train_Y})print("Step:%d, loss==%.4f, W==%.4f, b==%.4f" % (step, c, sess.run(W), sess.run(b)))# 计算训练完毕的模型在训练集上的损失值,作为指标输出final_loss = sess.run(loss, feed_dict={X: train_X, Y_: train_Y})# 计算训练完毕的模型参数W和bweight, bias = sess.run([W, b])print("Step:%d, loss==%.4f, W==%.4f, b==%.4f" % (max_train_steps, final_loss, sess.run(W), sess.run(b)))print("Linear Regression Model: Y==%.4f*X+%.4f" % (weight, bias))
# ================ 模型可视化 ================# 初始化Matplotlib后端%matplotlib# 根据训练数据X和Y,添加对应的红色圆点plt.plot(train_X, train_Y, 'ro', label='Training data')# 根据模型参数和训练数据,添加蓝色(缺省色)拟合直线plt.plot(train_X, weight * train_X + bias, label='Fitted line')# 添加图例说明plt.legend()# 画出上面定义的图案plt.show()

这段代码在Google的colab上运行会出现问题。

TclError: no display name and no $DISPLAY environment variable

在stackoverflow上有人给出了解决方案,提到是matplotlib使用的后端默认选择Xwindows?因此需要将其后端改成Agg,具体解决方案有以下几种:
1. 需要在引入pyplot之前使用

import matplotlib
matplotlib.use('Agg')
  1. 直接在.config/matplotlib/matplotlibrc修改:
backend : Agg
  1. 在远程连接时选择使用Xwindows
ssh -X ...

关于Xwindows可看X窗口系统

这里主要深入探讨以下关于matplotlib的后端(Backend)。
matplotlib经常用在python shell中用作交互式编程,也有将其作为类似wxpython和pygtk这样的图形化界面使用,也有将其用在网络应用服务器中动态提供图片。因此为了能够包含所有的这些需求,matplotlib提供了指向不同输出的后端,相对应的前端就是用户编写使用的代码接口。后端包含两类,一类是user interface backends(用于pygtk, wxpython, tkinter, qt4, or macosx这类的交互式后端),另一类则是hardcopy backends(主要用于PNG, SVG, PDF, PS这类图片渲染并保存)。

matplotlib提供了四种方法来设置后端,如果设置之间相互冲突了,使用use()会覆盖matplotlibrc中的设置。

  • 第一种方法:matplotlibrc文件(具体看Customizing matplotlib)
backend : WXAgg   # use wxpython with antigrain (agg) rendering
  • 第二种方法:在shell中或者你的程序脚本中设置MPLBACKEND环境变量
> export MPLBACKEND="module://my_backend"
> python simple_plot.py> MPLBACKEND="module://my_backend" python simple_plot.py

这里设置的后台会覆盖matplotlibrc文件
- 第三种方法:对于单个脚本文件中也可以使用-d命令

> python script.py -dbackend

需要注意的是,这个方法已经被弃用了,推荐使用MPLBACKEND
- 第四种方法:如果你的脚本依赖于一个特殊的后台你可以使用use()

import matplotlib
matplotlib.use('PS')   # generate postscript output by default

需要注意的是,如果你使用这个方法,就必须在引入matplotlib.pyplot之前

下面是支持的一些后端选择

这里写图片描述

这里写图片描述


参考文献

what-is-a-backend,(https://matplotlib.org/faq/usage_faq.html#what-is-a-backend)


知识共享许可协议
本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。

这篇关于关于matplotlib的后端(Backend)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1002817

相关文章

matplotlib绘图中插入图片

在使用matplotlib下的pyplot绘图时,有时处于各种原因,需要采用类似贴图的方式,插入外部的图片,例如添加自己的logo,或者其他的图形水印等。 一开始,查找到的资料都是使用imshow,但是这会有带来几个问题,一个是图形的原点发生了变化,另外一个问题就是图形比例也产生了变化,当然最大的问题是图形占据了整个绘图区域,完全喧宾夺主了,与我们设想的只在绘图区域中占据很小的一块不相符。 经

matplotlib中文乱码问题

在使用Matplotlib进行数据可视化的过程中,经常会遇到中文乱码的问题。显示乱码是由于编码问题导致的,而matplotlib 默认使用ASCII 编码,但是当使用pyplot时,是支持unicode编码的,只是默认字体是英文字体,导致中文无法正常显示,所以显示中文乱码。 文本使用系统默认字体、手动指定字体、使用字体管理器来解决。 一、系统默认字体(全局设置字体) 在Matplotlib中

Matplotlib图像读取和输出及jpg、png格式对比,及透明通道alpha设置

图像像素值 图像像素值一般size为3,也就是通道数,分别代表R,G,B,如果只有单一 一个值则表示灰度值,也就是说一张二维图片,当长和宽都为1080时,那么若是灰度图像,图像尺寸为(1080,1080,1)若是RGB图像则为(1080,1080,3), jpg、png图像格式 jpg图像的灰度值范围和RGB范围为[0,255],数值类型为uint8,也就是无符号整数 png图像的灰度值范

使用matplotlib绘制散点图、柱状图和饼状图-学习篇

一、散点图 Python代码如下: num_points = 100x = np.random.rand(num_points) #x点位随机y = np.random.rand(num_points) #y点位随机colors = np.random.rand(num_points) #颜色随机sizes = 1000 * np.random.rand(num_points) # 大

Matplotlib通过axis()配置坐标轴数据详解

坐标轴范围设置 axis()可以直接传入列表[xmin,xmax,ymin,ymax]进行范围设置, 分别可以使用plt.axis()或者画布对象.axis()进行配置 import numpy as npimport matplotlib.pyplot as pltx = np.linspace(0, 20, 100)y = x*2plt.plot(x, y, 'r')plt.ax

【python 图像切割】matplotlib读取图像,裁剪图像

#-*-coding:utf-8-*-import sysreload(sys)sys.setdefaultencoding('utf-8')import matplotlib.pylab as plt# 加载图像im = plt.imread("E:/ID/2.png")print(im.shape)# (y轴像素点数, x轴像素点数,图像通道数)def plti(im, **kw

怎么使用matplotlib绘制一个从-2π到2π的sin(x)的折线图-学习篇

首先:如果你的环境中没有安装matplotlib,使用以下命令可以直接安装 pip install matplotlib 如何画一个这样的折线图呢?往下看 想要画一个简单的sin(x)在-2π到2π的折线图,我们要拆分成以下步骤: 先导入相关的库文件 我们需要创建一个数学函数相关的图,需要引入 numpy 我们需要绘制图表,所以需要引入matplotlib来绘制图表创建一个x值的数组从

解决matplotlib中文乱码最简单方案

解决matplotlib中文乱码问题方案众多,我认为如下方案是最简单的一个。 1、从电脑中搜索simhei字体,如下示意图是mac检索结果,或者直接搜索simhei.ttf下载字体 拷贝到指定路径:/path/to/mex/simhei.ttf  2、matplotlib 加载字体 def plot_with_chinese():     import matplotlib.pyp

Matplotlib详解 - PlotType : Pairwise data

1. 前言 Pairwise data(成对数据)指的是在数据集中,数据点是以成对的形式出现的,通常用于分析两者之间的关系或比较。在成对数据中,数据点通常是以两个变量的组合出现的,代表两个实体、两个属性或两个观测值之间的关系。 本篇文章讲解成对数据的可视化形式 2. plot()折线图 用途:最常见的折线图绘制函数,用于绘制连续数据的趋势 适用场景:绘制简单的线性或非线性关系,比

Matplotlib | 绘制饼图

目录 简介安装 Matplotlib开始绘制简单饼图添加标签添加百分比修改显示方式突出扇形设置标题修改颜色实践:绘制七大洲面积比例图 简介 饼图(Pie Chart),用扇形的面积,也就是圆心角的度数来表示数量。 饼图能够十分直观地展示出每个部分数据的占比,各部分比例总量必须是100%。 安装 Matplotlib 打开 CMD, 输入(前提是要安装 Python)