Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法更改Seaborn.FacetGrid中的线型_Python_Plot_Seaborn - Fatal编程技术网

Python 无法更改Seaborn.FacetGrid中的线型

Python 无法更改Seaborn.FacetGrid中的线型,python,plot,seaborn,Python,Plot,Seaborn,我正在尝试创建一个FaceGrid,其中包含完整的虚线,如。根据注释中的代码和注释,这应该可以工作,但是,我只得到完整的行,没有破折号 有人能帮我吗 最小工作示例: 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)]

我正在尝试创建一个FaceGrid,其中包含完整的虚线,如。根据注释中的代码和注释,这应该可以工作,但是,我只得到完整的行,没有破折号

有人能帮我吗

最小工作示例:

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')

Seaborn
lineplot
覆盖线条样式,以便将其与
样式
参数一起使用。在这里,您似乎不想使用
样式
。但是,似乎根本没有理由使用
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
参数用于
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"))


请注意,为了保证
“mode”
列的项目与样式的一致映射,需要设置样式顺序。

非常感谢!我认为您的第二个版本更适合,但我需要为线条指定不同的颜色,并希望控制哪种模式具有哪种线条样式和颜色。这可能吗?问题的答案是第一部分。在这里不使用建议的解决方案的具体原因是什么?第二部分只是说明了原则。如果第二部分太混乱的话,我可能会删除它。问题是,由于多次观测,每个(x,y)坐标的每个模式都有几个数据点。plt.plot()只为每个观察值绘制一条直线,而sns.lineplot()绘制一个置信区间(参见第一个示例)。我想要置信区间,所以我需要使用sns.lineplot。好的,我找到了一个有效的解决方案。也许你可以把它添加到你的答案中,然后我会接受它:我拒绝了编辑,因为我目前不确定
破折号
是否介意给定的样式顺序。此外,没有定义
hue\u顺序
。如果您验证了它对所有情况都有效(需要使用加扰数据帧),您可以提供自己的答案。