Canvas Graph plotten

Fragen zu Tkinter.
Antworten
Dusius

Hi zusammen,

zuerst einmal bin ich relativ neu in Python und generell im Programmieren.
Ich bin auf der Suche nach einer Möglichkeit einen Graph in ein Canvas Fenster zu plotten ohne matplotlibs
Bislang habe ich auch bereits das Canvas Fenster und einen kleinen Graph hinbekommen

w = tk.Canvas(self, width=1000, height=500, borderwidth=2, relief="ridge")
w.pack()

w.create_line(0, 20, 5, 25, 10, 30, 15, 40, 20, 35, 25, 30, 30, 40) #Graph

Nun möchte ich aber einen größeren Graph plotten (später soll das mal mit Zahlen aus einer csv Datei passieren). Hierzu möchte ich eine Methode generieren die mir den x Wert immer um +1 hoch zählt und den y Wert dann eben aus einer Tabelle nimmt.

Zuerst einmal kann die Methode auch nur den x Wert hoch zählen und den y Wert gebe ich manuell ein. Ich schaffe es irgendwie gerade nicht die Methode zu erstellen und sie mit create_line aufzurufen :K

Grüße
BlackJack

@Dusius: Nichts einfacher als das. :twisted:

Code: Alles auswählen

#!/usr/bin/env python
# coding: utf-8
from __future__ import absolute_import, division, print_function
import Tkinter as tk
from itertools import chain, izip
from random import randint


def main():
    width, height = 1000, 500
    step_size = 10
    root = tk.Tk()
    canvas = tk.Canvas(root, width=width, height=height)
    canvas.pack()
    values = (randint(10, height - 10) for _ in xrange(width // step_size))
    canvas.create_line(
        *(chain.from_iterable(izip(xrange(0, width, step_size), values)))
    )
    root.mainloop()


if __name__ == '__main__':
    main()
Dusius

Du bist mir jetzt aber hoffentlich nicht böse, wenn ich nicht wirklich verstehe was du da gemacht hast oder ^^
wenn du mir das kurz in zwei oder drei Sätzen erklären könntest wäre ich dir dankbar.
Ene Uran
User
Beiträge: 125
Registriert: Sonntag 17. September 2006, 20:14
Wohnort: Hollywood

Vielleicht kann dies Dir helfen:

Code: Alles auswählen

''' tk_canvas_graph102.py
plot a basic graph using Tkinter cavas.create_line()
'''

try:
    # Python2
    import Tkinter as tk
except ImportError:
    # Python3
    import tkinter as tk
import math

root = tk.Tk()
root.title("A basic plot using cavas.create_line()")

width = 400
height = 300
center = height//2
x_increment = 1
# width stretch
x_factor = 0.04
# height stretch
y_amplitude = 80

# create a canvas to draw on
cv = tk.Canvas(width=width, height=height, bg='white')
cv.pack()

# create the coordinate list for the sin() curve
# (values have to be integers)
sine_list = []
for x in range(width):
    # x coordinates
    sine_list.append(x * x_increment)
    # y coordinates
    sine_list.append(int(math.sin(x * x_factor) * y_amplitude) + center)

# create the coordinate list for the cos() curve
cos_list = []
for x in range(width):
    # x coordinates
    cos_list.append(x * x_increment)
    # y coordinates
    cos_list.append(int(math.cos(x * x_factor) * y_amplitude) + center)

# do the Tkinter canvas drawings
s = "sin(x)=blue  cos(x)=red"
cv.create_text(10, 20, anchor='sw', text=s)
center_line = cv.create_line([0, center, width, center], fill='green')
sin_line = cv.create_line(sine_list, fill='blue')
cos_line = cv.create_line(cos_list, fill='red')

root.mainloop()

Atomkraftwerkaktienbesitzer
Antworten