如何使用 seaborn 中的这些数据创建气泡图?

问题描述

我有我需要在一行中绘制的所有数据,例如:

mcc_name    year_1  year_2  year_3  year_1_%    year_2_%    year_3_%
book shop   30000   1500.41 9006.77 NaN         -0.4708        -0.60379

我希望 x 轴是列中的值:[year_1,year_2,year_3] 并且 y 轴中的值是 y 轴(pct 变化)...并且气泡的大小与这些值成正比在 [year_1,year_3] 中。

sns.scatterplot(data=data_row,x=['year_1','year_2','year_3'],y=['year_1_%','year_2_%','year_3_%'],size="pop",legend=False,sizes=(20,2000))

# show the graph
plt.show()

但我收到此错误

ValueError: Length of list vectors must match length of `data` when both are used,but `data` has length 1 and the vector passed to `y` has length 3.

我该如何绘图??

解决方法

您需要以长格式保存数据:

import pandas as pd
import seaborn as sns
import numpy as np

df = pd.DataFrame(np.array([30000,1500.41,9006.77,np.NaN,-0.4708,-0.60379]).reshape(1,-1),columns = ['year_1','year_2','year_3','year_1_%','year_2_%','year_3_%'],index = ['mcc_name'])

通常,如果您的列格式正确,您可以使用 wide_to_long,但在这种情况下,可能很容易单独融合并加入:

values = df.filter(regex='year_[0-9]$',axis=1).melt(value_name="value",var_name="year")
perc = df.filter(regex='_%',axis=1).melt(value_name="perc",var_name="year")
perc.year = perc.year.str.replace("_%","")
sns.scatterplot(data=values.merge(perc,on="year"),x = "year",y = "perc",size = "value")

enter image description here