gpt4 book ai didi

python - 多指标分组条形图

转载 作者:行者123 更新时间:2023-12-04 15:22:18 25 4
gpt4 key购买 nike

首先:我是 python 的新手。

我正在尝试可视化一些测量数据。每个条目都有一个象限、数字和扇区。原始数据位于 .xlsx 文件中。我设法使用 .pivot_table 根据其扇区对数据进行排序。由于重叠,数字和象限也必须被索引。现在我想将其绘制为条形图,其中条形按扇区分组,颜色代表象限。

但是因为数字也必须被索引,所以它在条形图中显示为一个单独的组。应该只有三个组,0、i 和 a。

enter image description here

MWE:

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

d = {'quadrant': ["0","0","0","0","0","0","I","I","I","I","I","I","I","I","I","I","I","I","II","II","II","II","II","II","II","II","II","II","II","II","III","III","III","III","III","III","III","III","III","III","III","III","IV","IV","IV","IV","IV","IV","IV","IV","IV","IV","IV","IV"], 'sector': [0,"0","0","0","0","0","a","a","a","a","a","a","i","i","i","i","i","i","a","a","a","a","a","a","i","i","i","i","i","i","a","a","a","a","a","a","i","i","i","i","i","i","a","a","a","a","a","a","i","i","i","i","i","i"], 'number': [1,2,3,4,5,6,1,2,3,4,5,6,1,2,3,4,5,6,1,2,3,4,5,6,1,2,3,4,5,6,1,2,3,4,5,6,1,2,3,4,5,6,1,2,3,4,5,6,1,2,3,4,5,6], 'Rz_m': [67.90,44.17,44.30,63.43,49.87,39.33,61.17,69.37,66.20,44.20,64.77,39.93,44.33,50.97,55.90,51.33,58.23,44.53,50.03,47.40,58.67,71.57,57.60,70.77,63.93,47.37,46.90,34.73,41.27,48.23,58.30,47.07,50.53,51.20,32.67,50.37,37.50,55.50,41.20,48.07,56.80,49.77,40.87,44.43,44.00,60.03,63.73,72.80,51.60,45.53,60.27,71.00,59.63,48.70]}

df = pd.DataFrame(data=d)

B = df.pivot_table(index=['sector','number', 'quadrant'])

B.unstack().plot.bar(y='Rz_m')

最佳答案

Python 中的数据可视化生态系统非常多样化,您可以使用多个库来生成相同的图表。 Matplotlib 是一个非常强大的库,但它也很低级,这意味着您通常需要在绘制图表之前做很多准备工作,所以通常您会发现人们使用 seaborn对于静态可视化,特别是如果它们有科学元素(它内置了对错误栏等内容的支持)

开箱即用,它有很多图表类型来支持探索性数据分析,并且构建在 matplotlib 之上。对于你的例子,如果我理解正确的话,它会很简单:

import seaborn as sns

sns.catplot(x="sector", y="Rz_m", hue="quadrant", data=df, ci=None,
height=6, kind="bar", palette="muted")

输出看起来像这样: enter image description here

请注意,在您的示例中,您错过了其中一个零的“”,并且 0 和“0”被绘制为单独的列。如果您使用的是 seaborn,则无需旋转数据,只需按照您定义的那样将其输入 df

对于交互式可视化(带有工具提示、缩放、平移等),您还可以查看 bokeh .

这有一个有趣的问题 - 如何将嵌套条在标签上居中。默认情况下,条形图以居中对齐方式绘制,这适用于奇数列。但是,对于偶数,您希望它们位于右侧的中心 edge .您可以对源代码 categorical.py 做一些小改动,从 1642 开始的行如下所示:

# Draw the bars
offpos = barpos + self.hue_offsets[j]
barfunc(offpos, self.statistic[:, j], -self.nested_width,
color=self.colors[j], align="edge",
label=hue_level, **kws)

保存.png,然后再改回来,但并不理想。可能值得向图书馆维护者举报。

关于python - 多指标分组条形图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63033102/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com