Plotnine条形图按变量

时间:2017-12-05 20:35:06

标签: plotnine

我对订购条形图有疑问。例如:

http://pythonplot.com/#bar-counts

(ggplot(mpg) +
aes(x='manufacturer') +
geom_bar(size=20) +
coord_flip() +
ggtitle('Number of Cars by Make')
)

如何通过“mpg”订购?

2 个答案:

答案 0 :(得分:3)

感谢has2k1:https://github.com/has2k1/plotnine/issues/94

如果x映射是有序分类,则会受到尊重。

from plydata import *
from plotnine import *
from plotnine.data import mpg

# count the manufacturer and sort by the count (see, plydata documentation
# or find out how to do the same thing using raw pandas)
m_categories = (
    mpg
    >> count('manufacturer', sort=True)
    >> pull('manufacturer')
)

df = mpg.copy()
df['manufacturer'] = pd.Categorical(df['manufacturer'],     categories=m_categories, ordered=True)

(ggplot(df) + 
   aes(x='manufacturer') +
geom_bar(size=20) + 
coord_flip() +
ggtitle('Number of Cars by Make')
)

答案 1 :(得分:0)

STHDA,我发现:

更改图例中的项目顺序函数scale_x_discrete 可以用于将项目顺序更改为“ 2”,“ 0.5”,“ 1”:

p + scale_x_discrete(limits=c("D2", "D0.5", "D1"))

我的目标是保留df的顺序,所以我这样做了:

scale_x_discrete(limits=df[xColumn].tolist())

然后我意识到第一个条形项目在末尾,所以我切换到:

scale_x_discrete(limits=df[xColumn].tolist()[::-1])

我无法使用reverse(),因为它可以正常工作并且不会返回列表,因此limits似乎看不到效果。