如何在 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 中使用这些数据创建气泡图?的主要内容,如果未能解决你的问题,请参考以下文章

Python中的分类气泡图

如何使用 seaborn 创建多线图?

更改刻度名称后,如何修复 seaborn 条形图中缺少的条形?

如何在 Python 中创建分类气泡图?

如何使用熊猫数据框中的列标记气泡图/散点图?

如何使用 Seaborn 创建 FacetGrid 堆叠条形图?