2016-01-02 2 views
0

Я пытаюсь следовать демо здесь: http://blog.yhat.com/posts/aggregating-and-plotting-time-series-in-python.html, и я не в состоянии воспроизвести фигуру imageПочему geom_bar() не меняет цвет заливки, как это предполагается в python ggplot?

мина выглядит следующим образом: badmeat

Я использую Win 8 с Python 2.7, последней ggplot мастер из github (0.6.6 я думаю, но пип говорит мне, что это 0.6.5), pandas 0.16.2, numpy 1.8.1 и matplotlib 1.4.3. Я думаю, что я правильно воспроизвел код из демо:

import numpy as np 
import pandas as pd 
import matplotlib.pylab as plt 
from ggplot import * 

def floor_decade(date_value): 
    "Takes a date. Returns the decade." 
    return (date_value.year // 10) * 10 

meat2 = meat.dropna(thresh=800, axis=1) # drop columns that have fewer than 800 observations 
ts = meat2.set_index(['date']) 

by_decade = ts.groupby(floor_decade).sum() 

by_decade.index.name = 'year' 

by_decade = by_decade.reset_index() 

p1 = ggplot(by_decade, aes('year', weight='beef')) + \ 
    geom_bar() + \ 
    scale_y_continuous(labels='comma') + \ 
    ggtitle('Head of Cattle Slaughtered by Decade') 

p1.draw() 
plt.show() 

by_decade_long = pd.melt(by_decade, id_vars="year") 

p2 = ggplot(aes(x='year', weight='value', colour='variable'), data=by_decade_long) + \ 
geom_bar() + \ 
ggtitle("Meat Production by Decade") 

p2.draw() 
plt.show() 

ответ

1

Вы близко. Попробуйте использовать параметр fill в ggplot вместо colour. Это позволит заполнить внутренности баров указанным цветом, а не окрашивать линии. Кроме того, вы можете изменить линии вокруг баров с помощью colour в качестве параметра geom_bar. Следующий пример показывает, как:

p2 = ggplot(aes(x='year', weight='value', fill='variable'), data=by_decade_long) + geom_bar(colour='black') + ggtitle("Meat Production by Decade")

Bar Chart Result

Источник: Я только что прошел через эту же борьбу обучения ggplot для питона.

+0

Спасибо. Странно, я уверен, что мой код воспроизводит здесь пример кода (http://blog.yhat.com/posts/aggregating-and-plotting-time-series-in-python.html), но их фигура выглядит по-другому. – wordsforthewise

+0

Как побочный вопрос, знаете ли вы простой способ изменить название переменной на легенде? – wordsforthewise

+1

@wordsforthewise, ну, как я могу себе представить, это переименование столбца dataframe из 'variable' в' colnamehere' или любое другое имя, которое вы хотите, например: by_decade_long.columns = ['year', 'colnamehere', 'value '] 'Я не уверен в редактировании фактического названия легенды, но этот способ изменяет название легенды на' colnamehere '. –

1

Для меня это не сработало. я все еще должен был добавить позицию аргумент = «стек» в geom_bar(), так geom_bar(position='stack'):

ggplot(aes(x='year', weight='value', fill='variable'), data=by_decade_long) + \ 
geom_bar(position='stack') + \ 
ggtitle("Meat Production by Decade") 

Обратите внимание, что с geom_bar(position='fill') вы получите относительные показатели, то есть проценты вместо значений.

Смежные вопросы