相对于图例,Seaborn重绘和散点图的标记大小不正确

时间:2019-06-15 09:39:16

标签: pandas seaborn

我试图了解如何使图例示例与在Jupyter笔记本中使用Seaborn的relplot绘制的点对齐。我的熊猫size float64中有一个DataFramedf)列:

sns.relplot(x="A", y="B", size="size", data=df)

size列中的值为[0.0, -7.0, -14.0, -7.0, 0.0, 1.0, 0.0, 0.0, 0.0, -1.0, 0.0, 8.0, 2.0, 0.0, -4.0, 7.0, -4.0, 0.0, 0.0, 4.0, 0.0, 0.0, -3.0, 0.0, 1.0, 7.0],如您所见,最小值为-14,最大值为8。传说与之相符。但是,看看实际绘制的点,有一个点大大小于图例中与-16对应的点。图例中也没有绘制像8一样大的点。

我在做什么错-还是一个错误?

Example of sizes not occurring in the dataset

我使用的是熊猫0.24.2和海洋生的0.9.0。


修改: 仔细查看Seaborn relplot example

relplot example

最小的权重是1613,但是情节的最左端有一个橙色的点,比图例中的1500小。 I think this points to this being a bug

1 个答案:

答案 0 :(得分:1)

不确定seaborn在这里做什么,但是如果您愿意单独使用matplotlib,它看起来像

import numpy as np; np.random.rand
import matplotlib.pyplot as plt
import pandas as pd

s = [0.0, -7.0, -14.0, -7.0, 0.0, 1.0, 0.0, 0.0, 0.0, -1.0, 0.0, 8.0, 2.0, 
     0.0, -4.0, 7.0, -4.0, 0.0, 0.0, 4.0, 0.0, 0.0, -3.0, 0.0, 1.0, 7.0]
x = np.linspace(0, 2*np.pi, len(s))
y = np.sin(x)
df = pd.DataFrame({"A" : x, "B" : y, "size" : s})

# calculate some sizes in points^2 from the initial values
smin = df["size"].min()
df["scatter_sizes"] = 0.25 * (df["size"] - smin + 3)**2
# state the inverse of the above transformation
finv = lambda y: 2*np.sqrt(y)+smin-3

sc = plt.scatter(x="A", y="B", s="scatter_sizes", data=df)
plt.legend(*sc.legend_elements("sizes", func=finv), title="Size")

plt.show()

enter image description here

更多详细信息在Scatter plots with a legend example中。