在seaborn lmplot的标记

时间:2017-11-01 05:15:46

标签: python pandas seaborn

from cycler import cycler
markers = cycler(marker=['*', 'o'] * 100)

g = sns.lmplot(x='x', y='y', df, fit_reg=False, hue='z', lowess=True, scatter_kws={'alpha': 0.5}, legend=True, markers=markers)

在上面的代码中,我想循环标记。但是,我收到了这个错误:

TypeError: unhashable type: 'Cycler'

如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

尝试markers=['*', 'o']

markers中的lmplot()参数要求hue的每个级别都有一个条目。你可以测试一下:

N = 100
data = {"x":np.random.random(N),
        "y":np.random.random(N),
        "z":np.random.choice([0,1], size=N)}
df = pd.DataFrame(data)

markers = [1,2,3]

g = sns.lmplot(x='x', y='y', data=df, fit_reg=False, hue='z', lowess=True, 
               scatter_kws={'alpha': 0.5}, legend=True, markers=markers)

^这会抛出错误:

  

ValueError:标记必须是singeton或色调变量的每个级别的标记列表

如果这是导入(相当深奥的)cycler模块的唯一用例,那么最好不要将其删除,只需定义要绑定到z列的标记即可

对于您发布的实际错误,请注意markers中的每个元素都是dict。有一个marker字段可以获得实际的marker字符。您可以通过以下方式看到:

for m in markers:
    print(m['marker'])