IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Chaine de caractère déconcaténée [Python 2.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Décembre 2015
    Messages : 4
    Par défaut Chaine de caractère déconcaténée
    Bonjour à tous,

    Tout d'abord, pour introduire mes propos, je suis physicien-chimiste et pour avoir développé quelques modèles sous fortran je me suis familiarisé à l'informatique (Alors vous pouvez y aller mais pas trop dure quand même ). Je développe actuellement un petit soft pour traiter mes datas de spectros de mass sous python (normalement j'ai posté au bon endroit).

    Fini les plaisanteries, voici mon problème :

    J'ai créé un dictionnaire me permattant de mettre en rapport une masse avec un élément afin de nomer certaines données et/ou d'indexer des pics. Le dictionnaire est crée à partir d'un fichier .txt. Lorsque je le lit et que j'écrit la ligne suivante :

    plt.legend((dico[Index]), loc=4, ncol=2, fontsize= 'small')

    cela donne le résultat Nom : legende_zarbie.png
Affichages : 125
Taille : 718 octets que vous pouvez observer sur la légende de l'image. Oui ma légende iSi+ à été dispatchée comme si chaque caractères du texte étaient séparés.

    J'ai tenté la fonction .join(), j'ai aussi tenté d'ajouté Leg=str(dico[Index]) et enfin de créer une liste comme suit List=[] puis Liste.append(dico[Index]) et
    plt.legend((Liste), loc=4, ncol=2, fontsize= 'small') afin de rassembler les caractères en une véritable chaine mais rien n'y fait.

    Je vous joint le fichier txt si vous voulez avoir plus d'infos Masses_F.txt et peut être tester le fichier.

    Donc, pour finir voici ma question. Que se passe t'il ? Pourquoi mon texte arrive en morceau dans la légende alors qu'il s'affiche sans problème lorsque je lui envoi un print ?

    En vous remerciant d'avance,

    cordialement,

    RomsTheBarbarian

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Faudrait voir le code que tu utilises pour créer le dictionnaire à partir du texte.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Décembre 2015
    Messages : 4
    Par défaut Code utilisé
    Le code utilisé est le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    dico = {}
    Especes=np.loadtxt('Masses_F.txt', dtype=str) #pour lever les doutes, np pour numpy 
     
    for ligne in Especes:
        element = ligne.split("-")
        Mas = element[0]
        elem = element[1]
        #dico.setdefault(cle, data)
        dico[int(Mas)] = elem

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 736
    Par défaut
    Salut,

    Citation Envoyé par RomsTheBarbarian Voir le message
    Donc, pour finir voici ma question. Que se passe t'il ? Pourquoi mon texte arrive en morceau dans la légende alors qu'il s'affiche sans problème lorsque je lui envoi un print ?
    La cause la plus probable est que vous n'utilisez pas .legend comme vous devriez le faire.
    Le plus simple serait de vous donner un exemple mais pas facile de le faire à partir du peu que vous donnez. Par contre, vous pouvez consulter le petit guide de matplotlib qui montre comment utiliser cela.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Décembre 2015
    Messages : 4
    Par défaut
    La cause la plus probable est que vous n'utilisez pas .legend comme vous devriez le faire.
    Le plus simple serait de vous donner un exemple mais pas facile de le faire à partir du peu que vous donnez. Par contre, vous pouvez consulter le petit guide de matplotlib qui montre comment utiliser cela.
    C'est à dire que j'ai recopié ce que j'avais fait plus avant dans le programme.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Legendes=[]
    for i in range(0,L): 
    	nom= 'm'+str(Temp[i])+'.csv' 
    	"""lirecsv(nom,p) lit le fichier et le r'envoie sous forme de matrice 'p=1' ou le découpe par tranche de 50 u.m.a et le r'envoie en plusieure matrice 'p=0'"""
    	[a,b]= lirecsv(nom,0) 
    	Legendes.append(nom) # J'ajoute les noms à ma liste en l'agrandissant
     
    	for j in range(0,6):
    		"""Construction des graphs et superposition des valeurs """
    		plt.figure(j+1)
    		plt.semilogy(a[:,j],b[:,j])
    		plt.xlabel('Masses (u.m.a)')
    		plt.ylabel('Counts (c/s)')
    		plt.title('Diagramme de masse')
    		plt.legend((Legendes), loc=4, ncol=3, fontsize= 'small')
    		if i==(L-1): # Ici vous avez deviné que l'on sauve
    			plt.savefig("figure"+str(q)+".eps")
    			q += 1
    Dans le cas ci-dessus cela m'affiche ceci Nom : bonne_legende.png
Affichages : 114
Taille : 1,9 Ko.
    Donc, ma question serait plutôt : "Pourquoi cela fonctionne dans l'exemple ci-dessus et pas dans mon morceau finale que je vais vous joindre ci-dessous:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    test=np.zeros((L,2),dtype=int)
    q=0
    List=['rien']
    for i in range(0,Nbesp):
    	for j in range(0,L):
    		test[j,0]=Desorption_F[i*L+j,0]
    		test[j,1]=Desorption_F[i*L+j,1]
    	if (i+1)%5 == 0:
    		plt.savefig("figure"+str(q)+"_T.eps")
    		q += 1	
    	if (i+1)%5 == 0 or i==0:
    		plt.figure(str(q)+'_T')
     
    	plt.plot(test[:,0],test[:,1])
    	plt.xlabel('T (C)')
    	plt.ylabel('Counts (c/s)')
    	plt.title('Nbcoup=f(T)')
    	List.append(str(dico[Desorption[i*L,2]]))
    	plt.legend((List[1]), loc=4, ncol=2, fontsize= 'small')	
    	del List[1]
    	if i+1 == Nbesp:
    		plt.savefig("figure"+str(q)+"_T.eps")
    		q += 1
    J'ajouterais tout de même merci, et désolé pour les balises non mises, je n'avais pas encore vu toutes les fonctionnalités permises

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 736
    Par défaut
    Citation Envoyé par RomsTheBarbarian Voir le message
    Donc, ma question serait plutôt : "Pourquoi cela fonctionne dans l'exemple ci-dessus et pas dans mon morceau finale que je vais vous joindre ci-dessous
    Dans le premier cas, vous passez une liste de chaînes de caractères, dans le second, c'est juste une chaîne de caractères. Tous deux sont des itérables: matplotlib s'en accommode très bien. Mais côté affichage, dans le deuxième cas, la chaîne est découpée en caractères simples.
    Ca devrait mieux marcher en écrivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	List.append(str(dico[Desorption[i*L,2]]))
    	plt.legend(([ List[1] ]), loc=4, ncol=2, fontsize= 'small')
    notez les crochets ajoutés.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Décembre 2015
    Messages : 4
    Par défaut Congrat
    Merci beaucoup, cette histoire de crochet m'aura fait passer un peu de temps. En tout cas en effet cela fonctionne mieux ainsi.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 23/12/2013, 16h40
  2. Crypter une chaine de caractères
    Par Yabo dans le forum Réseau
    Réponses: 18
    Dernier message: 19/11/2004, 23h04
  3. Réponses: 9
    Dernier message: 17/01/2003, 11h45
  4. Lire Une Chaine De Caractères
    Par Jonathan_Korvitch dans le forum C
    Réponses: 12
    Dernier message: 07/01/2003, 05h37
  5. Réponses: 2
    Dernier message: 06/12/2002, 07h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo