2017-09-08 28 views
0

ここにコードがあります。ただし、ヒストグラムにはラベルとして黒色のアイコンが表示されます。どのように赤に変えたり、「暑い」色のグラデーションに変えることができますか?私は、バーの色を「暑い」グラデーションの色に変更したことは知っていますが、ヒストグラムの黒いラベルは分析的なものと区別したいので、私はそれを望ましくありません。ヒストグラムラベルアイコンの色を変更するにはどうすればよいですか?

import math, matplotlib.pyplot as plt, random 

def probability(x): 

    #wavefunction n=0 evaluated at position x 
    psi_0_x=math.exp(-x ** 2/2.0)/math.pi ** 0.25 

    #probability n=0 to be at position x 
    psi_0_x_squared= psi_0_x**2 

    return psi_0_x_squared 

data_x=[0] 
x = 0.0  #starts at position 0 
delta = 0.5 #stepsize 
trial_steps=1000000 

for t in range(trial_steps): 

    #displace x by delta 
    x_new = x + random.uniform(-delta, delta) 

    #selecciono un numero entre 0 y 1 (incluye acceptance y rejection probability). Metropolis! 
    #probabilidad de estar en nuevo sitio/probabilidad de quedarme en el sitio anterior 
    if random.uniform(0.0, 1.0) < probability(x_new)/probability(x): 

     #me muevo si la condicion es cierta (está en el accepted range) 
     x = x_new 
    data_x.append(x) 

#histogram 
cm = plt.cm.get_cmap('hot') 
n, bins, patches= plt.hist(data_x, bins=100, normed=True, color='r',label='Histogram') 
for height, p in zip(n, patches): 
    plt.setp(p, 'facecolor', cm(height)) 

plt.xlabel('x') 
plt.ylabel('$Probability =|\psi_0(x)|^2$') 

#general analytical formula 
x_grid = [a/100.0 for a in range(-300,301)] 
Prob = [probability(position) for position in x_grid] 
plt.plot(x_grid, Prob, linewidth=1.5, color='k', label='Analytical') 

plt.title("Position's probability density $|\psi_0(x)|^2$ for a harmonic oscillator.") 
plt.savefig('ground_probability_x.png') 
plt.legend() 
plt.show() 

enter image description here

答えて

1

一つの解決策は、それが置かれた生成histfacecolorの更新前legend。また、小さな問題に気付いたので、なぜlegendの生成前にも数字を保存していますか?ここでは、固定コードと結果は次のとおりです。

import math, matplotlib.pyplot as plt, random 

def probability(x): 

    #wavefunction n=0 evaluated at position x 
    psi_0_x=math.exp(-x ** 2/2.0)/math.pi ** 0.25 

    #probability n=0 to be at position x 
    psi_0_x_squared= psi_0_x**2 

    return psi_0_x_squared 

data_x=[0] 
x = 0.0  #starts at position 0 
delta = 0.5 #stepsize 
trial_steps=1000000 

for t in range(trial_steps): 

    #displace x by delta 
    x_new = x + random.uniform(-delta, delta) 

    #selecciono un numero entre 0 y 1 (incluye acceptance y rejection probability). Metropolis! 
    #probabilidad de estar en nuevo sitio/probabilidad de quedarme en el sitio anterior 
    if random.uniform(0.0, 1.0) < probability(x_new)/probability(x): 

     #me muevo si la condicion es cierta (está en el accepted range) 
     x = x_new 
    data_x.append(x) 

#histogram 
cm = plt.cm.get_cmap('hot') 
n, bins, patches= plt.hist(data_x, bins=100, normed=True, color='r',label='Histogram') 


plt.xlabel('x') 
plt.ylabel('$Probability =|\psi_0(x)|^2$') 

#general analytical formula 
x_grid = [a/100.0 for a in range(-300,301)] 
Prob = [probability(position) for position in x_grid] 
plt.plot(x_grid, Prob, linewidth=1.5, color='k', label='Analytical') 
plt.title("Position's probability density $|\psi_0(x)|^2$ for a harmonic oscillator.") 
# first legend, then updating the facecolor 
plt.legend() 
for height, p in zip(n, patches): 
    plt.setp(p, 'facecolor', cm(height)) 
# finally save the figure 
plt.savefig('ground_probability_x.png') 
plt.show() 

enter image description here

は、それが参考になると思います。ありがとう。

+0

あなたは節約の部分について正しいですね。そしてあなたの助けに感謝:) – Caterina

関連する問題