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

时间:2017-12-13 15:06:39

标签: python python-3.x pandas matplotlib bar-chart

此处的目标是创建分组条形图,而不是下图所示的子图

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

year2

enter image description here

3 个答案:

答案 0 :(得分:12)

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

一样进行转动
df.pivot("column", "group", "val")

生产

group   g1  g2
column        
c1      10   8
c2      12  10
c3      13  12

绘制此图将产生一个分组的条形图。

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()

enter image description here

答案 1 :(得分:0)

您可以使用下面给出的代码简单地做到这一点:

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"})

输出:

Output

答案 2 :(得分:0)

  • 给定一个长数据的数据帧,如 OP 所示,不需要转换数据帧的实现是使用带有 hue 参数的 seaborn.barplot
  • seabornmatplotlib
  • 的高级 API
  • 使用 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')

enter image description here