2016-03-09 17 views
8

Similar to a question I asked previously var, böyle bir MWe vardır:Değişim renk, verilen değerin

import pandas as pd 
import matplotlib.pyplot as plt 
import seaborn as sns 
import numpy as np 

pd.Series(np.random.normal(0, 100, 1000)).plot(kind='hist', bins=50, color='orange') 

bar_value_to_colour = 102 

Sonra otomatik histogram üzerinde çubuğunun rengini değiştirmek için bar_value_to_colour değişkeni kullanmak istiyorum hangi değer örneğin mavi bulunduğu:

enter image description here

Bunu nasıl başarabiliriz?

+0

ben tam Sen ulaşmak için çalışıyoruz anlamıyorum İşte benim çözümdür. Çubukların rengini 100 ile mavi arasında değiştirmek mi istiyorsunuz? Sorunuzun son cümlesini açıklamaya çalışabilir misin? –

+0

Soruyu düzenledim, bu işleri daha netleştiriyor mu? – BML91

+1

şimdi kristal berraklığında. –

cevap

7

rectangle.get_x() ile çubuğun x koordinatını almak kolaydır, ancak sorun, çubukların tam olarak belirli değerlerde çizilmemesidir, böylece en yakın olanı seçmek zorunda kaldım.

import pandas as pd 
import matplotlib.pyplot as plt 
import numpy as np 

s = pd.Series(np.random.normal(0, 100, 10000)) 
p = s.plot(kind='hist', bins=50, color='orange') 

bar_value_to_label = 100 
min_distance = float("inf") # initialize min_distance with infinity 
index_of_bar_to_label = 0 
for i, rectangle in enumerate(p.patches): # iterate over every bar 
    tmp = abs( # tmp = distance from middle of the bar to bar_value_to_label 
     (rectangle.get_x() + 
      (rectangle.get_width() * (1/2))) - bar_value_to_label) 
    if tmp < min_distance: # we are searching for the bar with x cordinate 
          # closest to bar_value_to_label 
     min_distance = tmp 
     index_of_bar_to_label = i 
p.patches[index_of_bar_to_label].set_color('b') 

plt.show() 

döner:

enter image description here

+0

@ BML91 Kodumda küçük bir düzeltme yaptım, böylece çubuğun sol koordinatından hesaplamak yerine çubuğun ortasından olan mesafeyi hesaplar. tmp = abs ((rectangle.get_x() + (rectangle.get_width() * (1/2))) - bar_value_to_label) 'yerine tmp = abs (rectangle.get_x() - bar_value_to_label)'. Çubuklar daha kalınsa önemli olabilir. –