使用列表而不是数据框绘制Seaborn条形图

5

我一直在尝试将我的绘图转换为Seaborn,但是我在拥有多个条形图的问题上遇到了困难。数据是一个列表的列表,像这样:

raw_data = [[47.66773437098896, 47.585408826566024, 45.426437828641106, 44.955787935926836], 
           [47.700582993718115, 47.59796443553682, 45.38896827262796, 44.80916093973529], 
           [47.66563311651776, 47.476571906259835, 45.21460968763448, 44.78683755963528], 
           [47.248523637295705, 47.42573841363118, 45.52890109500238, 45.10243082784969], 
           [47.14532745960979, 47.46958795222966, 45.4804195003332, 44.97715435208194], 
           [46.61620129160194, 47.316775886868584, 45.053032014046366, 44.527497508033704]]

我简单的seaborn脚本如下:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns    

def plot_sns(raw_data):
  data = np.array(raw_data)

  x = np.arange(len(raw_data))
  width = 0.2  # width of bar

  sns.axes_style('white')
  sns.set_style('white')

  ax = sns.barplot(x, data[:,0])

这将产生以下绘图: enter image description here 我想在图表中添加更多的条形(每组4个),在Matplotlib中,我通过绘制另一个间隔到右侧的条形来实现,但在Seaborn中没有成功。所有我看到的例子都是使用Pandas数据框。

1
你会通过 pd.DataFrame(raw_data).plot.bar() 获得期望的输出吗? - ImportanceOfBeingErnest
我只能使用Seaborn和Pandas吗? - user8200327
从问题中的代码来看,您可以在不使用pandas的情况下使用seaborn。但是我的先前评论更多地是想问为什么要使用seaborn?您不只用pandas就能得到所需的输出吗? - ImportanceOfBeingErnest
以上代码片段按预期工作。由于我有其他想要使用Seaborn呈现的图形,因此我希望使用Seaborn执行上述操作。 - user8200327
使用seaborn绘制所需的条形图的原因是能够轻松地绘制长格式数据框。在这里,您有一个宽格式的numpy数组。当然,您可以使用pandas将其转换为长格式数据框。但实际上没有必要这样做。 - ImportanceOfBeingErnest
1个回答

2

seaborn.barplot也可以绘制字典,这允许数据进行分组。为了正确分组,您需要添加4个类别,以便有4个并排的条形图。您还需要相应地重新排列数据:

import seaborn as sns

raw_data = {
    # cat:    A                  B                  C                    D
    'x': ['Group 1',          'Group 1',         'Group 1',           'Group 1',
          'Group 2',          'Group 2',         'Group 2',           'Group 2',
          'Group 3',          'Group 3',         'Group 3',           'Group 3',
          'Group 4',          'Group 4',         'Group 4',           'Group 4',
          'Group 5',          'Group 5',         'Group 5',           'Group 5',
          'Group 6',          'Group 6',         'Group 6',           'Group 6'],
    'y': [47.66773437098896,  47.585408826566024, 45.426437828641106, 44.955787935926836,
          47.700582993718115, 47.59796443553682,  45.38896827262796,  44.80916093973529, 
          47.66563311651776,  47.476571906259835, 45.21460968763448,  44.78683755963528,
          47.248523637295705, 47.42573841363118,  45.52890109500238,  45.10243082784969, 
          47.14532745960979,  47.46958795222966,  45.4804195003332,   44.97715435208194, 
          46.61620129160194,  47.316775886868584, 45.053032014046366, 44.527497508033704],
    'category': ['A', 'B', 'C', 'D','A', 'B', 'C', 'D','A', 'B', 'C', 'D','A', 'B', 'C', 'D','A', 'B', 'C', 'D','A', 'B', 'C', 'D']
           }

sns.barplot(x='x', y='y', hue='category', data=raw_data)
xcategory 字段为每个值分配了一个组和类别,以便 barplot 可以对值进行分组。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接