见this issue。
next() 需要使用迭代器。您可以使用intertools 创建一个,
import itertools
mks = itertools.cycle(['o', 'x', '^', '+', '*', '8', 's', 'p', 'D', 'V'])
markers = [next(mks) for i in df["category"].unique()]
例子:
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
dic={"A":[4,6,5], "B":[2,7,5], "category":['A','A',"B"]}
df=pd.DataFrame(dic)
import itertools
mks = itertools.cycle(['o', 'x', '^', '+', '*', '8', 's', 'p', 'D', 'V'])
markers = [next(mks) for i in df["category"].unique()]
sns.lmplot('A', 'B', data=df, hue='category', markers=markers, fit_reg=False)
plt.show()
请注意,这可能有点矫枉过正,您可以直接从列表中获取标记,
marker = ['o', 'x', '^', '+', '*', '8', 's', 'p', 'D', 'V']
markers = [marker[i] for i in range(len(df["category"].unique()))]
完整示例:
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
dic={"A":[4,6,5], "B":[2,7,5], "category":['A','A',"B"]}
df=pd.DataFrame(dic)
marker = ['o', 'x', '^', '+', '*', '8', 's', 'p', 'D', 'V']
markers = [marker[i] for i in range(len(df["category"].unique()))]
sns.lmplot('A', 'B', data=df, hue='category', markers=markers, fit_reg=False)
plt.show()
上述两种解决方案的结果相同: