2015-07-22 3 views
2

У меня есть штриховой график, и я хочу получить его цвета и значения x/y. Вот пример кода:Matplotlib: получить цвета и x/y данные с графика штрихов

import matplotlib.pyplot as plt 
def main(): 
    x_values = [1,2,3,4,5] 
    y_values_1 = [1,2,3,4,5] 
    y_values_2 = [2,4,6,8,10] 
    f, ax = plt.subplots(1,1) 
    ax.bar(x_values,y_values_2,color='r') 
    ax.bar(x_values,y_values_1,color='b') 
    #Any methods? 
    plt.show() 
if __name__ == '__main__': 
    main() 

Существуют ли методы какax.get_xvalues(), ax.get_yvalues(), ax.get_colors(), которые я могу использовать, чтобы я мог извлечь обратно из ax списки x_values, y_values_1, y_values_2 и цвета 'r' и 'b' ?

+0

Sooorrrrt из, но они будут хрупкими и неудобно. Обычно вы сохраняете вычисленные значения барплота, например, 'rbar = ax.bar (x_values, y_values_2, color = 'r')', а затем работая с 'rbar'. Можете ли вы это сделать? – cphlewis

+0

Я предпочитаю не. Но я соглашусь на все, что у вас есть :) – noam

ответ

1

ax знает, что геометрические объекты не рисует, но ничего об этом отслеживает, когда были добавлены эти геометрические объекты, и, конечно, он не знает, что они «означают»: какой патч приходит от которого идущего на сюжет и т. д. Кодер должен отслеживать это, чтобы повторно извлечь нужные части для дальнейшего использования. Способ сделать это является общим для многих программ на языке Python: вызов barplot возвращает BarContainer, который можно назвать в то время и использовать позже:

import matplotlib.pyplot as plt 
def main(): 
    x_values = [1,2,3,4,5] 
    y_values_1 = [1,2,3,4,5] 
    y_values_2 = [2,4,6,8,10] 
    f, ax = plt.subplots(1,1) 
    rbar = ax.bar(x_values,y_values_2,color='r') 
    bbar = ax.bar(x_values,y_values_1,color='b') 
    return rbar, bbar 

if __name__ == '__main__': 
    rbar, bbar = main() 
    # do stuff with the barplot data: 
    assert(rbar.patches[0].get_facecolor()==(1.0,0.,0.,1.)) 
    assert(rbar.patches[0].get_height()==2) 
+0

Мне бы хотелось получить ответ, который не использует 'rbar' и' bbar', и извлекает данные прямо из 'ax'. Однако это также полезный ответ. Благодаря! – noam