【发布时间】:2015-11-22 13:24:25
【问题描述】:
我有以下代码:
import numpy as np
import pandas as pd
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
matplotlib.style.use('ggplot')
import seaborn as sns
sns.set(style="white")
# Create a dataset with many short random walks
rs = np.random.RandomState(4)
pos = rs.randint(-1, 2, (10, 5)).cumsum(axis=1)
pos -= pos[:, 0, np.newaxis]
step = np.tile(range(5), 10)
walk = np.repeat(range(10), 5)
df = pd.DataFrame(np.c_[pos.flat, step, walk],
columns=["position", "step", "walk"])
# Initialize a grid of plots with an Axes for each walk
grid = sns.FacetGrid(df, col="walk", hue="walk", col_wrap=5, size=5,
aspect=1)
# Draw a bar plot to show the trajectory of each random walk
grid.map(sns.barplot, "step", "position", palette="Set3").add_legend();
grid.savefig("/Users/mymacmini/Desktop/test_fig.png")
#sns.plt.show()
这使得这个情节:
如您所见,我把图例弄错了。我怎样才能使它正确?
【问题讨论】:
-
你应该使用
factorplot,或者如果你真的想直接使用FacteGrid,你必须在map中传递hue变量。 -
@mwaskom 非常感谢。你能举个例子吗?我试过这个但也失败了
grid.map(sns.barplot, "step", "position", hue="step", palette="Set3").add_legend(); -
这是第三个位置参数。但是你真的应该使用
factorplot... -
@mwaskom 对不起。我的意思是我尝试了这个
grid = sns.factorplot(x="step",y="position", col="walk", kind="bar", data=df, col_wrap=4, aspect=1, size=5, palette="Set3").add_legend(),但没有出现图例。
标签: python pandas matplotlib seaborn