使用电报bot(python,matplotlib)绘制函数

64jmpszr  于 2022-11-30  发布在  Python
关注(0)|答案(1)|浏览(117)

我在写电报机器人的时候遇到了这个问题。如果有人能帮我解决这个问题,我会很高兴的。
我的代码

import telebot 
import matplotlib.pyplot as plt
import numpy as np

...
def plot_func(message):
    x = np.linspace(-5,5,100)
    y = message.text # <-- here is something wrong I supppose

    plt.plot(x, y, 'r')
    plt.savefig('plot_name.png', dpi = 300)
    bot.send_photo(message.chat.id, photo=open('plot_name.png', 'rb'))
    #plt.show()

主题

用户发送函数,机器人绘制并发送回图像:

错误

/home/anmnv/Desktop/news_scrapper_bot/bot.py:148: UserWarning: Starting a Matplotlib GUI outside of the main thread will likely fail.
  plt.plot(x, y, 'r')
Traceback (most recent call last):
  File "/home/anmnv/Desktop/news_scrapper_bot/bot.py", line 424, in <module>
    bot.polling(none_stop=True)
  File "/home/anmnv/.local/lib/python3.10/site-packages/telebot/__init__.py", line 1047, in polling
    self.__threaded_polling(non_stop=non_stop, interval=interval, timeout=timeout, long_polling_timeout=long_polling_timeout,
  File "/home/anmnv/.local/lib/python3.10/site-packages/telebot/__init__.py", line 1122, in __threaded_polling
    raise e
  File "/home/anmnv/.local/lib/python3.10/site-packages/telebot/__init__.py", line 1078, in __threaded_polling
    self.worker_pool.raise_exceptions()
  File "/home/anmnv/.local/lib/python3.10/site-packages/telebot/util.py", line 154, in raise_exceptions
    raise self.exception_info
  File "/home/anmnv/.local/lib/python3.10/site-packages/telebot/util.py", line 98, in run
    task(*args, **kwargs)
  File "/home/anmnv/Desktop/news_scrapper_bot/bot.py", line 148, in plot_func
    plt.plot(x, y, 'r')
  File "/home/anmnv/.local/lib/python3.10/site-packages/matplotlib/pyplot.py", line 2730, in plot
    return gca().plot(
  File "/home/anmnv/.local/lib/python3.10/site-packages/matplotlib/axes/_axes.py", line 1662, in plot
    lines = [*self._get_lines(*args, data=data, **kwargs)]
  File "/home/anmnv/.local/lib/python3.10/site-packages/matplotlib/axes/_base.py", line 311, in __call__
    yield from self._plot_args(
  File "/home/anmnv/.local/lib/python3.10/site-packages/matplotlib/axes/_base.py", line 504, in _plot_args
    raise ValueError(f"x and y must have same first dimension, but "
ValueError: x and y must have same first dimension, but have shapes (100,) and (1,)
  • 提前谢谢你 *
ar5n3qh5

ar5n3qh51#

假设message.text包含字符串'x**2',可以使用numexpr.evaluate转换为numpy数组:

import numexpr
import matplotlib.pyplot as plt

x = np.linspace(-5, 5, 100)
y = numexpr.evaluate(message.text) # message.text = 'x**2'

plt.plot(x, y, 'r')

输出量:

相关问题