首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用电报bot (python,matplotlib)绘制一个函数

用电报bot (python,matplotlib)绘制一个函数
EN

Stack Overflow用户
提问于 2022-11-25 09:22:47
回答 1查看 20关注 0票数 1

我在写电报机器人的时候遇到了这个问题。如果有人能帮我做这件事我会很高兴的。

我的代码

代码语言:javascript
运行
复制
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()

主要思想

用户发送功能,bot绘制它并发送图像回来:

错误

代码语言:javascript
运行
复制
/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,)

提前谢谢你

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-25 09:38:02

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

代码语言:javascript
运行
复制
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')

输出:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74570550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档