为什么geom_bar()不会改变填充颜色,就像它应该在python ggplot中一样?

时间:2016-01-02 07:04:14

标签: python matplotlib python-ggplot

我正在尝试按照此处的演示:http://blog.yhat.com/posts/aggregating-and-plotting-time-series-in-python.html并且无法重现该图 image

我看起来像这样: badmeat

我正在使用Win 8和Python 2.7,来自github的最新ggplot大师(0.6.6我想,但是pip告诉我它是0.6.5),pandas 0.16.2,numpy 1.8.1和matplotlib 1.4 0.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()

2 个答案:

答案 0 :(得分: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 for python。

答案 1 :(得分:1)

对我来说这没用。 我仍然需要将参数position ='stack'添加到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'),您将获得相对分数,即百分比而不是值。