créer un graphique

Le
fred1599
Bonjour,

Plus rapide voila un programme vite fait me créant une sinusoide

#!usr/bin/python

# _*_ coding: utf-8 *_*

from math import *

x=0

while x != 360:
x=x+1
y=sin(((x*pi)/180))
print x,y

Vous pensez bien que ce n'est pas terminé, j'aimerais créer la
sinusoide.

Pourriez vous m'expliquer la demarche SVP.

Merci par avance
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Laurent Pointal
Le #644654
Bonjour,

Plus rapide voila un programme vite fait me créant une sinusoide

#!usr/bin/python

# _*_ coding: utf-8 *_*

from math import *

x=0

while x != 360:
x=x+1
y=sin(((x*pi)/180))
print x,y

Vous pensez bien que ce n'est pas terminé, j'aimerais créer la
sinusoide.

Pourriez vous m'expliquer la demarche SVP.

Merci par avance



Si tu veux chercher la solution par toi-même, avec Tkinter, deux pistes:

http://www.jchr.be/inf/doc/tkinter.htm
Cf "3.3 'create_line' et 'create_polygon'"
(site que je viens de découvrir et que je bookmak de ce pas)


Sinon, tu peux aussi utiliser pygnuplot, c'est fait pour tracer des courbes.
http://gnuplot-py.sourceforge.net/
http://www.gnuplot.info/download.html


A+

Laurent.

Méta-MCI \(MVP\)
Le #644653
Bonjour !

Tu veux visualiser une sinusoïde ?

Tente ce script :

import math,time
n=0
while 1:
n+=0.10
print ' '*int(math.sin(n)*24.0+25.0),'Vive Python !'
time.sleep(0.02)


;o)

Michel Claveau
Laurent Pointal
Le #644651

Sinon, tu peux aussi utiliser pygnuplot, c'est fait pour tracer des courbes.
http://gnuplot-py.sourceforge.net/
http://www.gnuplot.info/download.html


Chaco2:

http://code.enthought.com/chaco


Bookmarqué - ça semble très sympa, et puissant (ajout d'outils au choix
sur la fenêtre d'affichage du graphique).

https://svn.enthought.com/enthought/browser/trunk/enthought.chaco2_3.0/examples/simple_line.py


Après, il faut voir si l'objectif de fred (l'autre, chez gmail - à moins
que ça ne soit toi aussi) est d'avoir un graphique en résultat, ou bien
d'apprendre comment on crée un graphique "en bas niveau" (pas trop bas
non plus).


fred1599
Le #644650
Merci pour vos réponses,

Le but de ces questions est d'apprendre et non de créer, pour cela je
me fixe un objectif et j'essai de le faire jusqu'au bout mais ça
n'arrive pas toujours à terme.

Je vais tester gnuplot pourquoi pas





Sinon, tu peux aussi utiliser pygnuplot, c'est fait pour tracer des co urbes.
http://gnuplot-py.sourceforge.net/
http://www.gnuplot.info/download.html


Chaco2:

http://code.enthought.com/chaco


Bookmarqué - ça semble très sympa, et puissant (ajout d'outils au c hoix
sur la fenêtre d'affichage du graphique).

https://svn.enthought.com/enthought/browser/trunk/enthought.chaco2_3.0/ex amples/simple_line.py


Après, il faut voir si l'objectif de fred (l'autre, chez gmail - à mo ins
que ça ne soit toi aussi) est d'avoir un graphique en résultat, ou bi en
d'apprendre comment on crée un graphique "en bas niveau" (pas trop bas
non plus).




jean-michel bain-cornu
Le #644649
Bonjour,
Vous pensez bien que ce n'est pas terminé, j'aimerais créer la
sinusoide.

Pourriez vous m'expliquer la demarche SVP.
Tu peux le faire avec wx, même si les modules déjà cités sont

probablement beaucoup plus adaptés.

Exemple :

import math,wx
#----------------------------------------------------------------------
class DrawPanel(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent, -1)
self.SetBackgroundColour(wx.WHITE)
self.Bind(wx.EVT_PAINT, self.OnPaint)
self.points = []
x= float(0)
for n in range(10000):
x+= 0.25
k= float(n)/100
self.points.append((int(x),int(math.sin(k)*100)+100))
def OnPaint(self, evt):
dc = wx.PaintDC(self)
dc.BeginDrawing()
dc.Clear()
dc.SetPen(wx.Pen("BLACK", 4))
dc.DrawPointList(self.points)
dc.EndDrawing()
#----------------------------------------------------------------------
app= wx.PySimpleApp()
frame=wx.Frame(None,wx.ID_ANY,'Test')
panel= DrawPanel(frame)
frame.Show()
app.MainLoop()
#----------------------------------------------------------------------

tool69
Le #644648
Salut,

J'ai créé un module pour cela (il date un peu, mais ça marche plutôt
bien) géoPyX, basé sur PyX:

Pour ta sinusoïde, voilà la sortie en pdf :

http://kib2.free.fr/temp/sinus_graphe.pdf

A noter que c'est plutôt fait pour inclure dans des documents LaTeX.

Kib².
jean-michel bain-cornu
Le #644381
Bonjour,

Vous pensez bien que ce n'est pas terminé, j'aimerais créer la
sinusoide.

Pourriez vous m'expliquer la demarche SVP.
Tu peux le faire avec wx, même si les modules déjà cités sont

probablement beaucoup plus adaptés.

Exemple :



Je me relis, et je me dis que ce doit être bien ésotérique pour un
débutant. Voici donc le même, un peu simplifié (si peu), et avec des
commentaires.

# -*- coding: iso-8859-1 -*-
import math,wx # wx doit être installé, voir www.wxpython.org
#----------------------------------------------------------------------
class DrawPanel(wx.Panel): # wx.Panel est simplement un conteneur d'objets
# __init__ est le constructeur
def __init__(self, parent):
wx.Panel.__init__(self, parent) # appel du constructeur de
wx.Panel
self.SetBackgroundColour(wx.WHITE)
self.Bind(wx.EVT_PAINT, self.OnPaint) # gérer évènement
wx.EVT_PAINT dans OnPaint
#--construction coordonnées des points de la sinusoïde
self.points = []
x= float(0) # x est l'abscisse
for n in range(10000):
x+= 0.25
k= float(n)/100
y= (math.sin(k)*100)+100 # y est l'ordonnée
self.points.append((int(x),int(y)))
# OnPaint est appelée à chaque affichage
def OnPaint(self, evt):
dc = wx.PaintDC(self) # wx.PaintDC est un contexte de dispositif
dc.BeginDrawing()
dc.Clear() # effacement de la zone d'affichage
dc.SetPen(wx.Pen("BLACK")) # on dit qu'on va écrire en noir
dc.DrawPointList(self.points) # on écrit les points dont les
coordonnées sont dans self.points
dc.EndDrawing()
#----------------------------------------------------------------------
app= wx.PySimpleApp() # app va gérer la procédure de fenêtre
frame=wx.Frame(None,wx.ID_ANY,'Test') # création de la fenêtre de base
panel= DrawPanel(frame) # création du conteneur d'objets
frame.Show() # afficher frame
app.MainLoop() # entrer dans la boucle d'évènements
#----------------------------------------------------------------------


fred1599
Le #644136
Bonjour,

Merci pour ton programme qui est fort intéressant, je le relis et te
dis ce que je ne comprend pas.

Mais avant j'ai une opération qui m'a choquée, c'est "x+=0,25" que je
ne comprend pas.

Peux-tu m'expliquer?




Bonjour,

Vous pensez bien que ce n'est pas terminé, j'aimerais créer la
sinusoide.

Pourriez vous m'expliquer la demarche SVP.
Tu peux le faire avec wx, même si les modules déjà cités sont

probablement beaucoup plus adaptés.

Exemple :



Je me relis, et je me dis que ce doit être bien ésotérique pour un
débutant. Voici donc le même, un peu simplifié (si peu), et avec des
commentaires.

# -*- coding: iso-8859-1 -*-
import math,wx # wx doit être installé, voir www.wxpython.org
#----------------------------------------------------------------------
class DrawPanel(wx.Panel): # wx.Panel est simplement un conteneur d'obje ts
# __init__ est le constructeur
def __init__(self, parent):
wx.Panel.__init__(self, parent) # appel du constructeur de
wx.Panel
self.SetBackgroundColour(wx.WHITE)
self.Bind(wx.EVT_PAINT, self.OnPaint) # gérer évènement
wx.EVT_PAINT dans OnPaint
#--construction coordonnées des points de la sinusoïde
self.points = []
x= float(0) # x est l'abscisse
for n in range(10000):
x+= 0.25
k= float(n)/100
y= (math.sin(k)*100)+100 # y est l'ordonnée
self.points.append((int(x),int(y)))
# OnPaint est appelée à chaque affichage
def OnPaint(self, evt):
dc = wx.PaintDC(self) # wx.PaintDC est un contexte de disposi tif
dc.BeginDrawing()
dc.Clear() # effacement de la zone d'affichage
dc.SetPen(wx.Pen("BLACK")) # on dit qu'on va écrire en noir
dc.DrawPointList(self.points) # on écrit les points dont les
coordonnées sont dans self.points
dc.EndDrawing()
#----------------------------------------------------------------------
app= wx.PySimpleApp() # app va gérer la procédure de fenêtre
frame=wx.Frame(None,wx.ID_ANY,'Test') # création de la fenêtre de base
panel= DrawPanel(frame) # création du conteneur d'objets
frame.Show() # afficher frame
app.MainLoop() # entrer dans la boucle d'évènements
#----------------------------------------------------------------------




tool69
Le #644135
Bonjour,

Merci pour ton programme qui est fort intéressant, je le relis et te
dis ce que je ne comprend pas.

Mais avant j'ai une opération qui m'a choquée, c'est "x+=0,25" que je
ne comprend pas.

Peux-tu m'expliquer?


Salut,

"x+=0,25" signifie simplement "x=x + 0.25".
Tu incrémentes donc x à chaque itération (dans la boucle "for n in
range(10000)...").

jean-michel bain-cornu
Le #644134
Bonsoir,
"x+=0,25" signifie simplement "x=x + 0.25".
Tu incrémentes donc x à chaque itération (dans la boucle "for n in
range(10000)...").
Oui, ça sert juste à faire évoluer l'abscisse. J'aurais pu écrire aussi

x+=.25
Note que j'ai mis x=float(0) de manière à souligner que x est un nombre
en format flottant. J'aurais pu mettre x=0, ce qui aurait créé x en
entier (type(x) : <type 'int'>) ; le simple fait de lui ajouter un
nombre à virgule l'aurait par la suite 'transformé' en flottant (type(x)
: <type 'float'>) ce qui correspondait à mes besoins qui étaient de
faire évoluer l'abscisse de 1 pixel toutes les 4 itérations.
Voilà, voilà.
A+
jm

Publicité
Poster une réponse
Anonyme