如何用Python设计的界面生成简单的图表

我打算设计一个界面,可以直接生成一个简单的图表,不需要输入数据,点击直接生成,每次点击都发生变化,当你找到需要的图标样式,可以点击保存,还设置一个清除图表的功能,比如折线图、柱状图等。

如下图



用自带tkinter建立窗口,图表就matplotlib绘图库,没有的就要去P下,我的之前安装过了就不pip,已经安装了就不会安装,有必要可以更新


我们可以先把要用到的都搞进来

import tkinter as tk#还是用自带的

from tkinter import ttk, filedialog

import matplotlib.pyplot as plt #没有就需要安装

from matplotlib.figure import Figure

from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg

import numpy as np

然后初始化点,

class PlotApp:

def __init__(self, root):

self.root = root

self.root.title("设计一个简单随机生成图界面 v0.1")

self.setup_ui()

self.current_figure = None

def setup_ui(self):

"""初始化界面组件"""

# 主框架布局

main_frame = ttk.Frame(self.root)

main_frame.pack(fill=tk.BOTH, expand=True)

# 左侧控制面板,控制主要操作

control_panel = ttk.Frame(main_frame, width=150)

control_panel.pack(side=tk.LEFT, fill=tk.Y)

# 右侧生成图标区域

plot_frame = ttk.Frame(main_frame)

plot_frame.pack(side=tk.RIGHT, fill=tk.BOTH, expand=True)

搞几个按钮吧

# 根据你的思路添加按钮

ttk.Button(control_panel, text="点我生成折线图", command=self.plot_line).pack(pady=5, fill=tk.X)

ttk.Button(control_panel, text="点我生成柱状图", command=self.plot_bar).pack(pady=5, fill=tk.X)

ttk.Button(control_panel, text="点我生成散点图", command=self.plot_scatter).pack(pady=5, fill=tk.X)

ttk.Button(control_panel, text="点我清除生成的图表", command=self.clear_plot).pack(pady=5, fill=tk.X)

ttk.Button(control_panel, text="点我保存图表", command=self.save_plot).pack(pady=5, fill=tk.X)

生成的图标,初始化下,下笔从哪开始总要告诉它

# 初始化绘图区域

self.figure = Figure(figsize=(6, 4), dpi=100)

self.canvas = FigureCanvasTkAgg(self.figure, master=plot_frame)

self.canvas.get_tk_widget().pack(fill=tk.BOTH, expand=True)

自动生成的,搞点数据来,你也可以通过输入数据,还是先搞点简单的。

def generate_sample_data(self):

"""自动的么,就搞点数据生成,不能就要设置一些输入框输入数据生成"""

x = np.linspace(0, 10, 50)

y = np.sin(x) + np.random.normal(0, 0.2, 50)

return x, y

现在我们通过上面的数据,开始生成

def plot_line(self):

"""通过生成的数据,绘制折线图"""

self._prepare_plot()

ax = self.figure.add_subplot(111)

x, y = self.generate_sample_data()

ax.plot(x, y, color='blue', marker='o', linestyle='--')

ax.set_title("折线图示例")

self.canvas.draw()

def plot_bar(self):

"""通过生成的数据,绘制柱状图"""

self._prepare_plot()

ax = self.figure.add_subplot(111)

x = ['1', '2', '3', '4', '5']

y = np.random.randint(10, 50, 5)

ax.bar(x, y, color='green', alpha=0.7)

ax.set_title("柱状图示例")

self.canvas.draw()

def plot_scatter(self):

"""通过生成的数据,绘制散点图"""

self._prepare_plot()

ax = self.figure.add_subplot(111)

x, y = self.generate_sample_data()

ax.scatter(x, y, color='red', s=50, alpha=0.6)

ax.set_title("散点图示例")

self.canvas.draw()

def _prepare_plot(self):

"""通过生成的数据,准备绘图区域"""

self.figure.clear()

self.figure.subplots_adjust(left=0.1, right=0.9, top=0.9, bottom=0.1)



还有清除、保存功能,不要忘记了

"""清除图表"""

def clear_plot(self):

self.figure.clear()

self.canvas.draw()

def save_plot(self):

"""保存图表"""

if not self.figure.axes:

tk.messagebox.showwarning("警告", "请先生成图表!")

return


file_path = filedialog.asksaveasfilename(

defaultextension=".png",

filetypes=[("PNG文件", "*.png"), ("PDF文件", "*.pdf"), ("所有文件", "*.*")]

)

if file_path:

self.figure.savefig(file_path)

tk.messagebox.showinfo("保存成功", f"图表已保存至:\n{file_path}")



开始吧

if __name__ == "__main__":

root = tk.Tk()

root.geometry("800x600")

app = PlotApp(root)

root.mainloop()

附上代码截图






相关文章

用Python让图表动起来,居然这么简单

我好像看到这个emoji:动起来了!编译:佑铭参考:https://towardsdatascience.com/how-to-create-animated-graphs-in-python-bb6...

升职利器之Python漂亮图表生成

数据枯燥无味没人愿意看,生成图表简单直观。领导一看就懂,是不是很值得一试。下面给大家介绍一下pyecharts这个神器。pyecharts是百度Echarts的python封装,简单易用,漂亮直观。p...

python制作仪表盘图

今天教大家用pyecharts画仪表盘仪表盘 (Gauge) 是一种拟物化的图表,刻度表示度量,指针表示维度,指针角度表示数值。仪表盘图表就像汽车的速度表一样,有一个圆形的表盘及相应的刻度,有一个指针...

5分钟就能做一个Excel动态图表,你确定不学学?(纯gif教学)

本文说明 下图是一个比较酷炫的Excel动态图表,最难的部分就是用到了一个复选框控件。其实这个控件我很早就见过,但是不会用呀!望洋兴叹。这次呢,我也是借着这个文章为大家讲述一下这个控件的使用。本文没有...

如何用 Matplotlib 和 Seaborn 制作令人惊叹的数据可视化图表

数据可视化是将复杂的数据通过图表的形式展现出来,让人们能够更直观地理解数据中的模式、趋势和见解。一张好的图表,往往比密密麻麻的数字更能说明问题。在 Python 的世界里,Matplotlib 和 S...