如何在 seaborn 中使用这些数据创建气泡图?
Posted
技术标签:
【中文标题】如何在 seaborn 中使用这些数据创建气泡图?【英文标题】:How can i create a bubble chart using this data in seaborn? 【发布时间】:2021-08-01 23:10:09 【问题描述】:我有我需要在一行中绘制的所有数据,例如:
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_2, 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.
我该如何绘图??
【问题讨论】:
【参考方案1】:您需要长格式的数据:
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")
【讨论】:
以上是关于如何在 seaborn 中使用这些数据创建气泡图?的主要内容,如果未能解决你的问题,请参考以下文章