首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从迭代和累积的数据在一个图中创建多个boxen图?

如何从迭代和累积的数据在一个图中创建多个boxen图?
EN

Stack Overflow用户
提问于 2022-07-13 15:06:15
回答 2查看 33关注 0票数 0

我有一个dataframe,它包含两个列,idvalue。每几行都有相同的id,但都有不同的值。我想要绘制一个boxen图,它显示了所有id的值的分布,以及从第一个id到当前的累积值的分布。这是一个简单的数据文件:

代码语言:javascript
复制
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

df = pd.DataFrame(columns=['id', 'value'])

for id in range(5):
    df = pd.concat([df, pd.DataFrame({'id': [id]*10, 'value':np.random.rand(10)})]).reset_index(drop=True)

这是:

代码语言:javascript
复制
plt.figure(figsize=(10, 5))

sns.boxenplot(x='id', y='value', data=df, width=0.4)

plt.show()

只绘制每个id的值分布。我希望累积的id的分布接近每个id值。例如:

对于id=0,两者是相同的,在0和0.5时,我想要相同的框

对于id=1,在x=1中,我希望有一个用id==1表示值的框,而对于id==0或id==1的值,我希望在1.5处有一个方框

对于id=2,在x=2中,我希望有一个用id==2表示值的框,而在2.5个框中,用id==0、id==1或id==2表示值

诸若此类。

我找不到一种方法将不同大小的数据框放在一个地块中。

EN

回答 2

Stack Overflow用户

发布于 2022-07-13 16:02:36

有几种方法-

DataFrame

  • 重塑您的数据,使其与seaborn所期望的输入相匹配(复制数据,并将其插入单个seaborn中)。

  1. 进入一些较低的matplotlib功能,并使用更多的手动控制创建图表.

海运-数据操作

实际上,我用相同的id存储不同标签“累积”和“非累积”下的重复数据。一旦我这样做,我就可以使用seaborn的接口来生成预期的绘图。

代码语言:javascript
复制
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

plt.rc('axes.spines', left=False, top=False, right=False)

rng = np.random.default_rng(0)

df = pd.DataFrame({
    'id': np.arange(5).repeat(10),
    'value': rng.random(5 * 10)
})

data = {}
cumul_groups = []
for id_, grp in df.groupby('id'):
    cumul_groups.append(id_)
    
    data[(id_, 'cumulative')] = df.loc[df['id'].isin(cumul_groups), 'value']
    data[(id_, 'non-cumulative')] = grp['value']

ax = sns.boxenplot(x='id', y='value', hue='type', data=pd.concat(data, names=['id', 'type']).reset_index())
ax.legend(loc='lower left', bbox_to_anchor=(1, .5))

票数 1
EN

Stack Overflow用户

发布于 2022-07-13 15:29:17

用熊猫GroupBy()计算和

代码语言:javascript
复制
df = df.groupby('id').sum()

plt.figure(figsize=(10, 5))

sns.boxenplot(x=df.index, y=df.value, data=df, width=0.4)

plt.show()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72968525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档