我正在尝试创建一个带有in this comment之类的实线和虚线的FacetGrid。根据注释中的代码和FacetGrid doc,这应该可以工作,但是,我只得到了实线,没有破折号。
有人可以帮我吗?
最低工作示例:
import matplotlib
import pandas as pd
import seaborn as sns
# toy data
x = [i for i in range(10)]*3
y = [0.5*i for i in range(10)]
y.extend([0.7*i for i in range(10)])
y.extend([0.3*i for i in range(10)])
mode = ["A" for i in range(10)]
mode.extend(["B" for i in range(10)])
mode.extend(["C" for i in range(10)])
method = ["X" for i in range(5)]
method.extend(["Y" for i in range(5)])
method = method*3
df = pd.DataFrame({'x' : x, 'y' : y, 'mode' : mode, 'method' : method})
sns.set_context("paper")
sns.set(style="whitegrid")
blue = matplotlib.colors.hex2color('#5862f4')
pink = matplotlib.colors.hex2color('#e059c3')
kw = {'color': [pink, pink, blue], 'linestyle' : ["-","--","-"]}
p = sns.FacetGrid(df, col='method', hue='mode', sharey='row', margin_titles=True, hue_kws=kw)
p.map(sns.lineplot, 'x', 'y')
p.axes[0,0].set_xlim(0,10)
p.add_legend()
plt.savefig("test.png", bbox_inches='tight')
答案 0 :(得分:2)
Seaborn lineplot
覆盖线型,例如将其与其style
参数一起使用。在这里,您似乎不想使用style
。而且,似乎根本没有理由使用lineplot
。因此,普通的plt.plot()
可以正常工作。
kw = {'color': [pink, pink, blue], 'linestyle' : ["-","--","-"]}
g = sns.FacetGrid(df, col='method', hue='mode', sharey='row', margin_titles=True, hue_kws=kw)
g.map(plt.plot, 'x', 'y')
为完整起见,这是将style
的{{1}}参数与lineplot
一起使用的方式。
FacetGrid
请注意,为了确保g = sns.FacetGrid(df, col='method', sharey='row', margin_titles=True)
g.map_dataframe(sns.lineplot, 'x', 'y', style="mode", style_order=list("ABC"))
列中的项目到样式的一致映射,需要设置样式顺序。