pycharm 中绘制随机漫步图不能出图


代码没有问题,在pycharm中绘制随机漫步图时出现Backend TkAgg is interactive backend. Turning interactive mode on这个问题,已经百度了,但是上边给出的方法,还是不能出图。绘制折线图可以出图。请大家指导一下,谢谢。

讨论数量: 28
Jason990420

一个简短的代码, 可以演示问题, 通过提供可以执行的操作, 可以帮助别人来帮你解决问题.

3年前 评论
Garvy (楼主) 3年前

from random import choice class RandomWalk(): """一个生成随机漫步数据的类""" def init(self,num_points=5000): """初始化随机漫步的属性""" self.num_points=num_points

     #所有随机漫步都始于(0,0)
    self.x_values=[0]
    self.y_values=[0]
def  fill_walk(self):
    """计算随机漫步包含的所有点"""
    #不断漫步,直到列表达到指定的长度
    while len(self.x_values) < self.num_points:
    #决定前进方向以及沿这个方向前进的距离
     x_direction=choice([1,-1])
     x_distance=choice([0,1,2,3,4])
     x_step=x_direction*x_distance

     y_direction = choice([1, -1])
     y_distance = choice([0, 1, 2, 3, 4])
     y_step = y_direction * y_distance
    # 拒绝原地踏步
     if x_step == 0 and y_step == 0:
       continue
    # 计算下一个点的x和y值
    next_x = self.x_values[-1] + x_step
    next_y = self.y_values[-1] + y_step

    self.x_values.append(next_x)
    self.y_values.append(next_y)

import matplotlib.pyplot as plt

创建一个RandomWalk实例,并将其包含的点都绘制出来

rw = RandomWalk() rw.fill_walk() plt.scatter(rw.x_values,rw.y_values,s=15) plt.show()

这是完整的代码,显示Backend TkAgg is interactive backend. Turning interactive mode on.就是不出现随机漫步图。

3年前 评论
Jason990420

matplotlib.pyplot.show

  • 在非交互模式下, 显示所有图形并停止直到图形被关闭

  • 在交互模式下, 除非在从非交互模式更改为交互模式之前创建图形 (不推荐), 否则 无效.

    在这种情况下, 它会显示图形, 但不会停止.

from matplotlib import get_backend, is_interactive, interactive
  • get_backend() 读取使用的backend, 'TkAgg'
  • is_interactive() 检查目前是否为交互模式, True
  • interactive(b) 设置是否为交互模式, b - True or False

问题处理步骤

  1. 首先检查你的backend为何? get_backend(), 已知是 TkAgg (交互式后端)
  2. 检查预设交互模式为何? is_interactive(), 已知是 True, 交互模式
  3. 因为你要用 matplotlib.pyplot.show, 所以要设置为非交互模式, interactive(False)

这样应该就可以了 !

3年前 评论
Garvy (楼主) 3年前
margo 1年前
Jason990420

见楼上第3点后面 !

3年前 评论

import matplotlib.pyplot as plt plt.ion() from random_walk import RandomWalk

创建一个RandomWalk实例,并将其包含的点都绘制出来

rw = RandomWalk() rw.fill_walk() plt.scatter(rw.x_values,rw.y_values,s=15) plt.ioff() plt.show() 添上这个第二行和第八行,结果还是Backend TkAgg is interactive backend. Turning interactive mode on.

3年前 评论
Jason990420

哎~ 哪这么复杂, 你有没有仔细看我发的内容?

from random import choice
import matplotlib.pyplot as plt
from matplotlib import interactive      # 加上两行, 这是第一行

class RandomWalk ():
    """一个生成随机漫步数据的类"""

    def __init__(self, num_points=5000):
        """初始化随机漫步的属性"""
        self.num_points=num_points
        #所有随机漫步都始于(0,0)
        self.x_values = [0]
        self.y_values = [0]

    def fill_walk(self):
        """计算随机漫步包含的所有点"""
        #不断漫步,直到列表达到指定的长度
        while len(self.x_values) < self.num_points:
            #决定前进方向以及沿这个方向前进的距离
            x_direction = choice([1, -1])
            x_distance = choice([0, 1, 2, 3, 4])
            x_step = x_direction*x_distance
            y_direction = choice([1, -1])
            y_distance = choice([0, 1, 2, 3, 4])
            y_step = y_direction * y_distance
            # 拒绝原地踏步
            if x_step == 0 and y_step == 0:
                continue
            # 计算下一个点的x和y值
            next_x = self.x_values[-1] + x_step
            next_y = self.y_values[-1] + y_step
            self.x_values.append(next_x)
            self.y_values.append(next_y)

# 创建一个 RandomWalk 实例,并将其包含的点都绘制出来
rw = RandomWalk()
rw.fill_walk()

interactive(False)                  # 加上两行, 这是第二行

plt.scatter(rw.x_values, rw.y_values, s=15)
plt.show()
3年前 评论

我看了,但是没看懂 。不好意思,我才开始学习python,基本上是小白。然后按照您给的代码输入进去,还是不行。谢谢您。

3年前 评论
Jason990420

检查一下

from matplotlib import is_interactive, interactive

print(is_interactive())
interactive(False)
print(is_interactive())
3年前 评论

file 结果是False

3年前 评论
Jason990420

不是有兩个 print ?

3年前 评论

file 两个False

3年前 评论
Jason990420

试一下这个, 仔细看哪一编号时, 图可以出现, 如果没错应该是1和3

import math
import matplotlib.pyplot as plt
from matplotlib import is_interactive, interactive

x = [i for i in range(360)]
y = [100*math.sin(i/180*math.pi) for i in range(360)]

plt.interactive(False)
interactive(False)
print('1', plt.isinteractive())
plt.plot(x, y)
plt.show()

plt.interactive(False)
interactive(True)
print('2', plt.isinteractive())
plt.plot(x, y)
plt.show()

plt.interactive(True)
interactive(False)
print('3', plt.isinteractive())
plt.plot(x, y)
plt.show()

plt.interactive(True)
interactive(True)
print('4', plt.isinteractive())
plt.plot(x, y)
plt.show()

plt.close()
3年前 评论

您好,按照您上边的程序1和3是False,2和4是True,然后我该怎么操作。谢谢

3年前 评论
Jason990420

1 和 3 有看到图 ?

3年前 评论

显示图形的那个框闪了一下,就不见了

3年前 评论
Jason990420

给我你的版本号

OS, Python, Matplotlib

3年前 评论

Win10-64bit python3.7.3 Matplotlib3.2.1

3年前 评论
Jason990420

在 Pycharm 左下角有 TODO, Terminal, Python Console

点一下 Python console, 复制内容, 发一下. 内容类似如下

D:\Software\Python37\python.exe "C:\Program Files\JetBrains\PyCharm Community Edition 2020.1\plugins\python-ce\helpers\pydev\pydevconsole.py" --mode=client --port=51565
import sys; print('Python %s on %s' % (sys.version, sys.platform))
sys.path.extend(['D:\\test', 'D:/test'])
PyDev console: starting.
Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) [MSC v.1916 64 bit (AMD64)] on win32
3年前 评论

"E:\Program Files\Python37\python.exe" "E:\Program Files\JetBrains\PyCharm 2019.3\plugins\python\helpers\pydev\pydevconsole.py" --mode=client --port=64067 import sys; print('Python %s on %s' % (sys.version, sys.platform)) sys.path.extend(['E:\PycharmProjects\untitled', 'E:/PycharmProjects/untitled']) PyDev console: starting. Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) [MSC v.1916 64 bit (AMD64)] on win32

3年前 评论
Jason990420

没办法了,我安装了一样的版本,python 3.7.3,matplotlib 3.2.1,pycharm 2019.3专业版(免费版也是一样),不管是在Pycharm,PyScripter,CMD,powershell,用你最原始的代码, 我这都没问题。 看不到问题,实在是无解! 只能再问两个问题了...

  1. pycharm 2019.3专业版是盗版的吧。
  2. 投射折线图可以出图??

如果不是 Pycharm 的问题, 只能全部重装 python, matplotlib

** 移除 python 时记得把目录清光 **

3年前 评论

我的pycharm是盗版的,折线图可以出。还是要向您真诚的说一声谢谢,感谢您这几天来的热心帮助。那我是不是重装个pycharm了。

3年前 评论
Jason990420

先重装个 community 免费版的再试, 免费版够用了.

还是不行再重装 Python, matplotlib.

3年前 评论

好的,谢谢您。

3年前 评论

你好,我也是同样的问题,我输入了上面帖子里的代码,显示了图 1,但我自己的程序不知道为什么不显示图形,能帮我看看是怎么回事吗,非常感谢!

3年前 评论

Win10-64bit python3.7 tensorflow2.0 C:\Users\wangyou9620\anaconda3\envs\tensorflow2.0\python.exe "C:\Program Files\JetBrains\PyCharm Community Edition 2020.2.1\plugins\python-ce\helpers\pydev\pydevconsole.py" --mode=client --port=57092

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!