用于创建分组条形图的功能

Ril*_*n42 11 python matplotlib bar-chart python-3.x pandas

这里的目标是创建一个分组的条形图,而不是如下图所示的子图

有没有一种简单的方法在Python中创建分组条形图?现在我得到了单独的条形图,而不是一个图上的单独条形图.

df = pd.DataFrame([['g1','c1',10],['g1','c2',12],['g1','c3',13],['g2','c1',8],['g2','c2',10],['g2','c3',12]],columns=['group','column','val'])

%matplotlib inline
df.groupby(['group']).plot(kind='bar')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Imp*_*est 18

Pandas将按列显示分组条形图.每行但不同列的条目将在结果图中构成一个组.因此,您需要"重塑"您的数据框以将"组"作为列.在这种情况下,您可以像

df.pivot("column", "group", "val")
Run Code Online (Sandbox Code Playgroud)

生产

group   g1  g2
column        
c1      10   8
c2      12  10
c3      13  12
Run Code Online (Sandbox Code Playgroud)

绘制此图将产生分组条形图.

import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame([['g1','c1',10],['g1','c2',12],['g1','c3',13],['g2','c1',8],
                   ['g2','c2',10],['g2','c3',12]],columns=['group','column','val'])

df.pivot("column", "group", "val").plot(kind='bar')

plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Tre*_*ney 12

  • 给定一个长(整齐)数据的数据帧,如OP所示,不需要转换数据帧的实现是seaborn.barplothue参数一起使用。
  • seaborn是一个高级 APImatplotlib
  • 测试seaborn 0.11.1matplotlib 3.4.2
import pandas as pd
import seaborn as sns

# the sample dataframe from the OP
df = pd.DataFrame([['g1', 'c1', 10], ['g1', 'c2', 12], ['g1', 'c3', 13], ['g2', 'c1', 8], ['g2', 'c2', 10], ['g2', 'c3', 12]], columns=['group', 'column', 'val'])

# plot with seaborn barplot
sns.barplot(data=df, x='column', y='val', hue='group')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Raw*_*ani 9

您可以使用下面给出的代码简单地执行此操作:

import pandas as pd
import matplotlib.pyplot as plt

positive_values = [20, 17.5, 40]
negative_values = [15, 8, 70]
index = ['Precision', 'Recall', 'f1-score',]
df = pd.DataFrame({'Positive Values': positive_values,
                    'Negative Values': negative_values}, index=index)
ax = df.plot.bar(rot=0, color={"Positive Values": "green", "Negative Values": "red"})
Run Code Online (Sandbox Code Playgroud)

输出:

输出