问题描述
我有我需要在一行中绘制的所有数据,例如:
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")