2016-09-02 1 views
2

Je veux faire des lignes de tige plus épaisses en python en utilisant plt.stem.Comment faire des lignes de tige plus épaisses dans matplolib

Voici mon code

import matplotlib.pyplot as plt 
import numpy as np 

N = 20 

n = np.arange(0, 2*N, 1) 

x = np.exp(-n/N)*np.exp(1j * 2*np.pi/N*n) 

plt.stem(n,x.real) 

plt.show() 

J'ai changé plt.stem(n,x.real,linewidth=10), mais rien n'a changé. N'y a-t-il aucune fonction pour définir le linewidth dans plt.stem?

Répondre

6

La documentation de plt.stem montre que la fonction renvoie tous les objets de ligne créés par le tracé. Vous pouvez l'utiliser pour effectuer manuellement les lignes plus épaisses après avoir tracé:

import matplotlib.pyplot as plt 
import numpy as np 

N = 20 
n = np.arange(0, 2*N, 1) 
x = np.exp(-n/N)*np.exp(1j * 2*np.pi/N*n) 

markers,stems,base = plt.stem(n,x.real) 
for stem in stems: 
    stem.set_linewidth(10) 
plt.show() 

result

+0

votre réponse me aider beaucoup, merci :) –

+0

@ 연평도 꽃게 잡이 Je suis content que ce soit fait :) Mais notez que l'autre réponse est probablement la * bonne * façon de le faire c'est beaucoup plus élégant. –

4

Cela peut également être modifié en utilisant plt.setp() comme il est indiqué dans la documentation matplotlib example. Le plt.setp() method vous permet de définir les propriétés d'un objet artiste après sa création.

import matplotlib.pyplot as plt 
import numpy as np 

x = np.linspace(0.1, 2*np.pi, 10) 
markerline, stemlines, baseline = plt.stem(x, np.cos(x), '-.') 
plt.setp(stemlines, 'linewidth', 4) 

plt.show() 

enter image description here

+1

Oh, très bien! Je ne sais pas à propos de setp, mais je suis sûr que je vais l'utiliser à l'avenir :) Je suggère [lien vers cela aussi] (http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot. setp), ce n'est probablement pas très connu. –

+1

@Andras Bonne idée, édité. –

+0

bon, c'est très simple et toujours je vais l'utiliser .thankyou –