• <bdo id='9QO6W'></bdo><ul id='9QO6W'></ul>

        <small id='9QO6W'></small><noframes id='9QO6W'>

        <i id='9QO6W'><tr id='9QO6W'><dt id='9QO6W'><q id='9QO6W'><span id='9QO6W'><b id='9QO6W'><form id='9QO6W'><ins id='9QO6W'></ins><ul id='9QO6W'></ul><sub id='9QO6W'></sub></form><legend id='9QO6W'></legend><bdo id='9QO6W'><pre id='9QO6W'><center id='9QO6W'></center></pre></bdo></b><th id='9QO6W'></th></span></q></dt></tr></i><div id='9QO6W'><tfoot id='9QO6W'></tfoot><dl id='9QO6W'><fieldset id='9QO6W'></fieldset></dl></div>
        <tfoot id='9QO6W'></tfoot>

      1. <legend id='9QO6W'><style id='9QO6W'><dir id='9QO6W'><q id='9QO6W'></q></dir></style></legend>

        如何从宽数据帧创建单个图形中的分组条形图

        How to create grouped bar plots in a single figure from a wide dataframe(如何从宽数据帧创建单个图形中的分组条形图)
              <tbody id='p0Gub'></tbody>

            <small id='p0Gub'></small><noframes id='p0Gub'>

            • <bdo id='p0Gub'></bdo><ul id='p0Gub'></ul>

                <i id='p0Gub'><tr id='p0Gub'><dt id='p0Gub'><q id='p0Gub'><span id='p0Gub'><b id='p0Gub'><form id='p0Gub'><ins id='p0Gub'></ins><ul id='p0Gub'></ul><sub id='p0Gub'></sub></form><legend id='p0Gub'></legend><bdo id='p0Gub'><pre id='p0Gub'><center id='p0Gub'></center></pre></bdo></b><th id='p0Gub'></th></span></q></dt></tr></i><div id='p0Gub'><tfoot id='p0Gub'></tfoot><dl id='p0Gub'><fieldset id='p0Gub'></fieldset></dl></div>
                <tfoot id='p0Gub'></tfoot>
                1. <legend id='p0Gub'><style id='p0Gub'><dir id='p0Gub'><q id='p0Gub'></q></dir></style></legend>
                  本文介绍了如何从宽数据帧创建单个图形中的分组条形图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我有以下DF:

                  test_df = pd.DataFrame({'name': ['a', 'b', 'c'], 'res1': [1,2,3], 'res2': [4,5,6]})

                  我希望绘制(理想情况下,在一个图表中)数据,这样我就可以为每行(每个名称)分别比较res1和res2。

                  我曾尝试实现类似的功能,但我想有一种更简单、更优雅的解决方案,它也允许我将所有内容放在一个图表中,并命名为x轴上的一个组。

                      plt.subplot(1, 3, i+1)
                      sns.barplot(x=test_df.iloc[i,1:].index.tolist(), y=test_df.iloc[i,1:].values.tolist())
                      plt.title(test_df.iloc[i,0])
                  

                  推荐答案

                  • 这可以使用seaborn.barplot完成,或者只使用pandas.DataFrame.plot,这样可以避免额外的导入。
                  • 如How to plot and annotate a grouped bar chart所示进行批注
                    • 使用.bar_label添加批注,matplotlib 3.4.2提供。
                    • 该链接还显示如果使用以前版本的matplotlib,如何添加批注。
                  • 使用pandas 1.3.0matplotlib 3.4.2seaborn 0.11.1
                  pandas.DataFrame.plot
                  • 该选项需要name作为索引值,或者res1res2作为索引。
                  import pandas as pd
                  
                  test_df = pd.DataFrame({'name': ['a', 'b', 'c'], 'res1': [1,2,3], 'res2': [4,5,6]})
                  
                  # display(test_df)
                    name  res1  res2
                  0    a     1     4
                  1    b     2     5
                  2    c     3     6
                  
                  # set name as the index
                  test_df.set_index('name', inplace=True)
                  
                  # display(test_df)
                        res1  res2
                  name            
                  a        1     4
                  b        2     5
                  c        3     6
                  
                  # plot and annotate
                  p1 = test_df.plot(kind='bar', rot=0)
                  
                  for p in p1.containers:
                      p1.bar_label(p, fmt='%.1f', label_type='edge')
                  

                  import pandas as pd
                  
                  test_df = pd.DataFrame({'name': ['a', 'b', 'c'], 'res1': [1,2,3], 'res2': [4,5,6]})
                  
                  # set name as the index and then Transpose the dataframe
                  test_df = test_df.set_index('name').T
                  
                  # display(test_df)
                  name  a  b  c
                  res1  1  2  3
                  res2  4  5  6
                  
                  # plot and annotate
                  p1 = test_df.plot(kind='bar', rot=0)
                  
                  for p in p1.containers:
                      p1.bar_label(p, fmt='%.1f', label_type='edge')
                  

                  WITHseaborn.barplot
                  • 使用pandas.DataFrame.melt将数据帧从宽格式转换为长格式,然后使用hue参数。
                  import pandas as pd
                  import seaborn as sns
                  
                  test_df = pd.DataFrame({'name': ['a', 'b', 'c'], 'res1': [1,2,3], 'res2': [4,5,6]})
                  
                  # melt the dataframe into a long form
                  test_df = test_df.melt(id_vars='name')
                  
                  # display(test_df.head())
                    name variable  value
                  0    a     res1      1
                  1    b     res1      2
                  2    c     res1      3
                  3    a     res2      4
                  4    b     res2      5
                  
                  # plot the barplot using hue; switch the columns assigned to x and hue if you want a, b, and c on the x-axis.
                  p1 = sns.barplot(data=test_df, x='variable', y='value', hue='name')
                  
                  # add annotations
                  for p in p1.containers:
                      p1.bar_label(p, fmt='%.1f', label_type='edge')
                  
                  • x='variable', hue='name'

                  • x='name', hue='variable'

                  这篇关于如何从宽数据帧创建单个图形中的分组条形图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

                  相关文档推荐

                  groupby multiple coords along a single dimension in xarray(在xarray中按单个维度的多个坐标分组)
                  Group by and Sum in Pandas without losing columns(Pandas中的GROUP BY AND SUM不丢失列)
                  Is there a way of group by month in Pandas starting at specific day number?( pandas 有从特定日期开始的按月分组的方式吗?)
                  Group by + New Column + Grab value former row based on conditionals(GROUP BY+新列+基于条件的前一行抓取值)
                  Groupby and interpolate in Pandas(PANDA中的Groupby算法和插值算法)
                  Pandas - Group Rows based on a column and replace NaN with non-null values(PANAS-基于列对行进行分组,并将NaN替换为非空值)
                  <legend id='izZcd'><style id='izZcd'><dir id='izZcd'><q id='izZcd'></q></dir></style></legend>
                    <tbody id='izZcd'></tbody>
                  • <tfoot id='izZcd'></tfoot>

                      • <bdo id='izZcd'></bdo><ul id='izZcd'></ul>

                      • <i id='izZcd'><tr id='izZcd'><dt id='izZcd'><q id='izZcd'><span id='izZcd'><b id='izZcd'><form id='izZcd'><ins id='izZcd'></ins><ul id='izZcd'></ul><sub id='izZcd'></sub></form><legend id='izZcd'></legend><bdo id='izZcd'><pre id='izZcd'><center id='izZcd'></center></pre></bdo></b><th id='izZcd'></th></span></q></dt></tr></i><div id='izZcd'><tfoot id='izZcd'></tfoot><dl id='izZcd'><fieldset id='izZcd'></fieldset></dl></div>

                            <small id='izZcd'></small><noframes id='izZcd'>