【问题标题】:How to put measures on x-axis with date and time combine in python using tkinter and matplotlib and numpy如何使用 tkinter 和 matplotlib 以及 numpy 在 python 中结合日期和时间在 x 轴上进行测量
【发布时间】:2022-12-11 23:23:58
【问题描述】:

我有一个使用 tkinter、matplotlib 和 numpy 的小型 GUI 应用程序。在这里,用户将上传一个 excel 文件并获得多线图。但主要问题是我无法将这些措施放在 x 轴上。这里的日期和时间组合将是 x 轴的度量。但只有一年即将到来。在这里我分享我的代码:

import tkinter as tk
from tkinter import filedialog
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
import pandas as pd
import matplotlib.dates
import numpy as np
from datetime import datetime

root= tk.Tk()

canvas1 = tk.Canvas(root, width = 1000, height = 300)
canvas1.pack()

label1 = tk.Label(root, text='Data Analyser')
label1.config(font=('Arial', 20))
canvas1.create_window(400, 50, window=label1)

def getExcel1 ():
      global df

      import_file_path = filedialog.askopenfilename()
      df = pd.read_excel (import_file_path)
      daytime=df.apply(lambda r : pd.datetime.combine(r['Day'],r['Time']),1)
      global bar1
      x = daytime
      y1 = df['Count']
      y2 = df['Month']

      figure1 = Figure(figsize=(8,3), dpi=100)
      subplot1 = figure1.add_subplot(111)
      subplot2 = figure1.add_subplot(111)
      bar1 = FigureCanvasTkAgg(figure1, root)
      bar1.get_tk_widget().pack(side=tk.LEFT, fill=tk.BOTH, expand=0)
      subplot1.plot(x, y1, color='green', linestyle='solid', linewidth = 2, marker='o', 
                    markerfacecolor='green', markersize=8, label='y1')
      subplot2.plot(x, y2, color='red', linestyle='solid', linewidth = 2, marker='o', 
                    markerfacecolor='red', markersize=8, label='y2')

def clear_charts():
      bar1.get_tk_widget().pack_forget()

browseButton_Excel1 = tk.Button(text='Load File...', command=getExcel1, bg='green', fg='white', font=('helvetica', 12, 'bold'))
canvas1.create_window(400, 180, window=browseButton_Excel1)

button2 = tk.Button (root, text='Clear Chart', command=clear_charts, bg='green', font=('helvetica', 11, 'bold'))
canvas1.create_window(400, 220, window=button2)

button3 = tk.Button (root, text='Exit!', command=root.destroy, bg='green', font=('helvetica', 11, 'bold'))
canvas1.create_window(400, 260, window=button3)

root.mainloop()

x 轴的度量值应类似于“2021-09-06 16:35:00”,但它仅随“2021”一起提供。 这是我的 Excel 文件日期:

也请建议我如何放置图例、轴标签和图形名称。请帮我解决这个问题。

【问题讨论】:

  • 将您的 excel/数据作为文本上传 很难从图像中重现示例

标签: python pandas numpy matplotlib tkinter


【解决方案1】:

这是因为它在lambda 函数中有问题。改为使用加号运算符进行简单连接

import tkinter as tk
from tkinter import filedialog
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
import pandas as pd
import matplotlib.dates
import numpy as np
from datetime import datetime

root= tk.Tk()

canvas1 = tk.Canvas(root, width = 1000, height = 300)
canvas1.pack()

label1 = tk.Label(root, text='Data Analyser')
label1.config(font=('Arial', 20))
canvas1.create_window(400, 50, window=label1)


def getExcel1 ():
      global df

      import_file_path = filedialog.askopenfilename()
      df = pd.read_excel (import_file_path)
      df['Day'] = pd.to_datetime(df['Day'])

      
      daytime=df['Day'].astype(str) + ' ' + df['Time']
      
      
      global bar1
      x = daytime
      y1 = df['Count']
      y2 = df['Month']

      figure1 = Figure(figsize=(8,3), dpi=100)
      subplot1 = figure1.add_subplot(111)
      subplot2 = figure1.add_subplot(111)
      bar1 = FigureCanvasTkAgg(figure1, root)
      bar1.get_tk_widget().pack(side=tk.LEFT, fill=tk.BOTH, expand=0)
      subplot1.plot(x, y1, color='green', linestyle='solid', linewidth = 2, marker='o', 
                    markerfacecolor='green', markersize=8, label='y1')
      subplot2.plot(x, y2, color='red', linestyle='solid', linewidth = 2, marker='o', 
                    markerfacecolor='red', markersize=8, label='y2')

def clear_charts():
      bar1.get_tk_widget().pack_forget()

browseButton_Excel1 = tk.Button(text='Load File...', command=getExcel1, bg='green', fg='white', font=('helvetica', 12, 'bold'))
canvas1.create_window(400, 180, window=browseButton_Excel1)

button2 = tk.Button (root, text='Clear Chart', command=clear_charts, bg='green', font=('helvetica', 11, 'bold'))
canvas1.create_window(400, 220, window=button2)

button3 = tk.Button (root, text='Exit!', command=root.destroy, bg='green', font=('helvetica', 11, 'bold'))
canvas1.create_window(400, 260, window=button3)

root.mainloop()

给#

【讨论】:

    猜你喜欢
    • 2016-01-03
    • 2018-09-20
    • 2015-05-02
    • 2017-08-23
    • 2012-03-26
    相关资源
    最近更新 更多