Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

créer un graphique

16 réponses
Avatar
fred1599
Bonjour,

Plus rapide voila un programme vite fait me cr=E9ant une sinusoide

#!usr/bin/python

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

from math import *

x=3D0

while x !=3D 360:
x=3Dx+1
y=3Dsin(((x*pi)/180))
print x,y

Vous pensez bien que ce n'est pas termin=E9, j'aimerais cr=E9er la
sinusoide.

Pourriez vous m'expliquer la demarche SVP.

Merci par avance

10 réponses

1 2
Avatar
Laurent Pointal
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.

Avatar
Méta-MCI \(MVP\)
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
Avatar
Laurent Pointal

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).


Avatar
fred1599
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).




Avatar
jean-michel bain-cornu
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()
#----------------------------------------------------------------------

Avatar
tool69
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².
Avatar
jean-michel bain-cornu
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
#----------------------------------------------------------------------


Avatar
fred1599
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
#----------------------------------------------------------------------




Avatar
tool69
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)...").

Avatar
jean-michel bain-cornu
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

1 2