【问题标题】:Lineplot in a while loop Python在while循环Python中的线图
【发布时间】:2021-10-26 06:51:07
【问题描述】:

我编写了一个非常简单的代码,我在其中询问用户输入。如果用户输入"y" 我想绘制一个折线图。如果用户键入"n",则循环中断。
我正在使用 Spyder IDE,我希望将折线图绘制在单独的窗口上,以便使用工具栏缩放和导航绘图。
我遇到了这个问题,每当我绘制绘图窗口时都会冻结并崩溃(如图所示):

这是我写的代码:

import random
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np

def plot_random():
    x1 = np.linspace(0,100,100)
    y1 = np.random.rand(100)
    
    title = 'Title of the plot'
    sns.set_style("whitegrid")
    plt.ion()
    line_plot = sns.lineplot(x=x1, y=y1)
    line_plot.set_title(title)
    line_plot.set(xlabel='xlabel', ylabel='ylabel')
    plt.show()
    plt.pause(5)    
    
while True:
    plotTF = input('Do you want to plot? (Y/N) ').lower()
    
    if plotTF == 'n':
        break
    elif plotTF == 'y':
        plot_random()
    else:
        print('Not a valid entry')

在添加 plt.pause(5) 之前,甚至没有绘制图表,但它弹出了一个白色的绘图窗口,该窗口立即崩溃。
现在它在 5 秒后绘图并崩溃。
我希望情节一直保持“可缩放”和“可导航”,直到用户提供其他输入。
我该如何解决这个问题?

【问题讨论】:

  • @riccado,你为什么不在 matplotlib 中使用动画?
  • @user1740577 这可能是解决方案,但我是 python 新手,我从未使用过它。我试过但没有工作结果。你能告诉我一些有用的例子吗?谢谢!
  • 这个答案对你有帮助吗? stackoverflow.com/questions/43445103/…

标签: python python-3.x matplotlib plot seaborn


【解决方案1】:

只需删除 plot_random 函数中的 plt.ion()plt.pause(5)
在 PyCharm 中测试

def plot_random():
    x1 = np.linspace(0, 100, 100)
    y1 = np.random.rand(100)

    title = 'Title of the plot'
    sns.set_style("whitegrid")
    line_plot = sns.lineplot(x = x1, y = y1)
    line_plot.set_title(title)
    line_plot.set(xlabel = 'xlabel', ylabel = 'ylabel')
    plt.show()

【讨论】:

  • 感谢您的回答。我按照你的建议做了,但问题仍然存在。现在,没有暂停,它甚至不会绘制线条,但只会弹出一个白色的崩溃窗口。相反,我注意到当我结束循环时,图表正确显示,问题是我希望能够在循环中导航图表。
  • 我可能错了,但我怀疑这是 Spyder IDE 的问题。根据上述建议,您的代码在 PyCharm IDE 中运行良好。您使用的是哪个版本的 matplotlib?
  • matplotlib 3.3.4 版本
猜你喜欢
  • 1970-01-01
  • 2014-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-09
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多