首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >利用熊猫.plot()

利用熊猫.plot()
EN

Stack Overflow用户
提问于 2022-05-05 10:58:23
回答 1查看 75关注 0票数 0

我创建了一个假设的DataFrame,包含20个实验的3个测量值。每个实验都与一个主题相关(3种可能性)。

代码语言:javascript
复制
import random
    
random.seed(42) #set seed
tuples = list(zip(*[list(range(20)),random.choices(['Jean','Marc','Paul'], k = 20)]))#index labels
index=pd.MultiIndex.from_tuples(tuples, names=['num_exp','Subject'])#index
test= pd.DataFrame(np.random.randint(0,100,size=(20, 3)),index=index,columns=['var1','var2','var3']) #DataFrame
test.head() #first lines

我成功地为每个主题构建了三种度量(每条都是一个实验)的堆叠条形图:

代码语言:javascript
复制
test.groupby('Subject').plot(kind='bar', stacked=True,legend=False) #plots

plot1 plot2 plot3

现在,我想把每一个情节(每一个主题)放在一个子图中。如果我使用“子图”参数,它将给出以下内容:

代码语言:javascript
复制
test.groupby('Subject').plot(kind='bar', stacked=True,legend=False,subplots= True) #plot with subplot

plotsubplot1 plotsubplot2 plotsubplot3

它为每个度量创建了一个子图,因为它们对应于我的DataFrame中的列。我不知道如何才能不这样做,因为我需要它们作为列来创建堆叠的栏。

因此,我的问题是:是否有可能在子图中用叠加的条形图来构造这种图形(最好是以一种优雅的方式,不需要迭代)?

提前谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-28 11:35:06

我用一个简单的循环解决了我的问题,除了熊猫.plot()

熊猫.plot()具有matplotlib轴对象的ax参数。

因此,从一系列不同的主题开始:

代码语言:javascript
复制
subj= list(dict.fromkeys(test.index.get_level_values('Subject')))

我定义了我的子情节:

代码语言:javascript
复制
fig, axs = plt.subplots(1, len(subj))

然后,我必须对每个子图进行迭代:

代码语言:javascript
复制
 for a in range(len(subj)):
    test.loc[test.index.get_level_values('Subject') == subj[a]].unstack(level=1).plot(ax= axs[a], kind='bar', stacked=True,legend=False,xlabel='',fontsize=10) #Plot
    axs[a].set_title(subj[a],pad=0,fontsize=15) #title 
    axs[a].tick_params(axis='y', pad=0,size=1) #yticks

它运行得很好!:终结果

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

https://stackoverflow.com/questions/72126072

复制
相关文章

相似问题

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