我试图做的情节需要实现三件事。


如果在同一天以相同的分数进行测验,则该点必须更大。
如果两个测验分数重叠,则必须有一些抖动,这样我们才能看到所有分数。
每个测验需要有自己的颜色


这就是我要怎么做。

 import seaborn as sns
 import pandas as pd
 data = {'Quiz': [1, 1, 2, 1, 2, 1],
         'Score': [7.5, 5.0, 10, 10, 10, 10],
         'Day': [2, 5, 5, 5, 11, 11],
         'Size': [115, 115, 115, 115, 115, 355]}

 df = pd.DataFrame.from_dict(data)

sns.lmplot(x = 'Day', y='Score', data = df, fit_reg=False, x_jitter = True, scatter_kws={'s': df.Size})
plt.show()


python - 为什么在海洋情节中设置色调会改变点的大小?-LMLPHP

设置色调几乎可以完成我需要做的所有事情,因此会导致这种情况。

 import seaborn as sns
 import pandas as pd
 data = {'Quiz': [1, 1, 2, 1, 2, 1],
         'Score': [7.5, 5.0, 10, 10, 10, 10],
         'Day': [2, 5, 5, 5, 11, 11],
         'Size': [115, 115, 115, 115, 115, 355]}

 df = pd.DataFrame.from_dict(data)

sns.lmplot(x = 'Day', y='Score', data = df, fit_reg=False, hue = 'Quiz', x_jitter = True, scatter_kws={'s': df.Size})
plt.show()


python - 为什么在海洋情节中设置色调会改变点的大小?-LMLPHP

在保持积分大小的同时,有什么方法可以使我保持色调?

最佳答案

这是行不通的,因为当您使用hue时,seaborn会执行两个单独的散点图,因此使用scatter_kws=传递的size参数不再与数据框的内容对齐。

您可以手动重新创建相同的效果:

x_col = 'Day'
y_col = 'Score'
hue_col = 'Quiz'
size_col = 'Size'
jitter=0.2

fig, ax = plt.subplots()
for q,temp in df.groupby(hue_col):
    n = len(temp[x_col])
    x = temp[x_col]+np.random.normal(scale=0.2, size=(n,))
    ax.scatter(x,temp[y_col],s=temp[size_col], label=q)
ax.set_xlabel(x_col)
ax.set_ylabel(y_col)
ax.legend(title=hue_col)


python - 为什么在海洋情节中设置色调会改变点的大小?-LMLPHP

关于python - 为什么在海洋情节中设置色调会改变点的大小?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60200244/

10-12 17:18