Python seaborn FaceGrid

Python seaborn FaceGrid,python,seaborn,facet-grid,Python,Seaborn,Facet Grid,我有一个计数绿色/橙色/红色的推销员为每个客户: 比如: sellor customer red green orange 0 73 c1 5 96 15 1 77 c1 88 18 79 2 97 c1 58 59 71 我可以用以下方法构建: df = pd.DataFrame() df["sellor"] = np.random.randint(0,100, 20) df["customer"] = ["c1"]*5 +

我有一个计数绿色/橙色/红色的推销员为每个客户: 比如:

    sellor  customer    red green   orange
0   73  c1  5   96  15
1   77  c1  88  18  79
2   97  c1  58  59  71
我可以用以下方法构建:

df = pd.DataFrame()
df["sellor"]   = np.random.randint(0,100, 20)
df["customer"]   = ["c1"]*5 + ["C2"]*5 + ["C3"]*5 + ["c4"]*5
df["red"] = np.random.randint(0,100, 20)
df["green"] = np.random.randint(0,100, 20)
df["orange"] = np.random.randint(0,100, 20)

df.sellor = df.sellor.astype("category")
df.customer = df.customer.astype("category")
现在我想将数据表示为图形: 目前我确实:

for customer in df.customer.unique():
    df[df.customer==customer].plot.bar(title=customer)
这给了我4张图片,如下所示:

我想我可以用seaborn FaceGrid做同样的事情,但是没有真正找到方法。 我试过:

sns.barplot(data=df, x="sellor", y="red", hue="customer")
但它只给了我一个图(没有客户细分)+它没有给我卖家提供的3条线:(


如何使用FaceGrid获得与循环相同的结果?

如果不使用seaborn,您可以将条形图绘制到同一图形的不同子地块

import matplotlib.pyplot as plt

u = df.customer.unique()
fig, axes = plt.subplots(ncols=len(u), figsize=(10,3))

for customer, ax in zip(u, axes):
    df[df.customer==customer].plot.bar(x="sellor", title=customer, ax =ax )

plt.tight_layout()    
plt.show()

您可以通过seaborn的FaceGrid实现类似的功能

import seaborn as sns
g = sns.FacetGrid(data=df, col="customer", col_order=["c1", "C2", "C3", "c4"])

def plot(*args,**kwargs):
    kwargs["data"].plot(kind="bar", x="sellor", ax=plt.gca())
g.map_dataframe(plot)
plt.show()

最后,要更改此处使用的颜色以匹配数据帧名称,可以设置颜色周期,例如:

plt.rcParams["axes.prop_cycle"] = plt.cycler("color", ["red", "green", "orange"])

不使用seaborn,您可以将条形图绘制到同一图形的不同子地块

import matplotlib.pyplot as plt

u = df.customer.unique()
fig, axes = plt.subplots(ncols=len(u), figsize=(10,3))

for customer, ax in zip(u, axes):
    df[df.customer==customer].plot.bar(x="sellor", title=customer, ax =ax )

plt.tight_layout()    
plt.show()

您可以通过seaborn的FaceGrid实现类似的功能

import seaborn as sns
g = sns.FacetGrid(data=df, col="customer", col_order=["c1", "C2", "C3", "c4"])

def plot(*args,**kwargs):
    kwargs["data"].plot(kind="bar", x="sellor", ax=plt.gca())
g.map_dataframe(plot)
plt.show()

最后,要更改此处使用的颜色以匹配数据帧名称,可以设置颜色周期,例如:

plt.rcParams["axes.prop_cycle"] = plt.cycler("color", ["red", "green", "orange"])

谢谢。你知道我怎样才能精确地为每个条指定颜色吗?=>绿色代表绿色,橙色代表橙色,红色代表红色?谢谢。你知道我如何精确地为每个条指定颜色吗?=>绿色代表绿色,橙色代表橙色,红色代表红色?