gpt4 book ai didi

python - 在 matplotlib 中设置分组条形图之间的间距

转载 作者:太空狗 更新时间:2023-10-29 17:36:58 24 4
gpt4 key购买 nike

我正在尝试按照图库中的示例在 matplotlib 中制作分组条形图。我使用以下内容:

import matplotlib.pyplot as plt
plt.figure(figsize=(7,7), dpi=300)
xticks = [0.1, 1.1]
groups = [[1.04, 0.96],
[1.69, 4.02]]
group_labels = ["G1", "G2"]
num_items = len(group_labels)
ind = arange(num_items)
width = 0.1
s = plt.subplot(1,1,1)
for num, vals in enumerate(groups):
print "plotting: ", vals
group_len = len(vals)
gene_rects = plt.bar(ind, vals, width,
align="center")
ind = ind + width
num_groups = len(group_labels)
# Make label centered with respect to group of bars
# Is there a less complicated way?
offset = (num_groups / 2.) * width
xticks = arange(num_groups) + offset
s.set_xticks(xticks)
print "xticks: ", xticks
plt.xlim([0 - width, max(xticks) + (num_groups * width)])
s.set_xticklabels(group_labels)

enter image description here

我的问题是:

  1. 如何控制条形图组之间的间距?现在间距很大,看起来很傻。请注意,我不想让条形变宽 - 我希望它们具有相同的宽度,但靠得更近。

  2. 如何让标签在条形图组下方居中?我试图想出一些算术计算来将 xlabels 定位在正确的位置(见上面的代码),但它仍然有点偏离......感觉有点像编写绘图库而不是使用绘图库。这怎么能解决? (是否有 matplotlib 的包装器或内置实用程序,这是默认行为?)

编辑:回复@mlgill:谢谢您的回答。您的代码当然要优雅得多,但仍然存在相同的问题,即条的宽度和组之间的间距没有单独控制。您的图表看起来正确,但条形图太宽了——它看起来像 Excel 图表——我想让条形图变细。

宽度和边距现在是关联的,所以如果我尝试:

margin = 0.60
width = (1.-2.*margin)/num_items

它使条形更细,但使组之间的距离变远,因此情节再次看起来不正确。

我怎样才能制作一个带两个参数的分组条形图函数:每个条形的宽度和条形组之间的间距,并像您的代码那样正确绘制它,即 x 轴标签居中位于团体?

我认为,由于用户必须计算特定的低级布局量,如边距和宽度,我们基本上仍在编写一个绘图库:)

最佳答案

其实我觉得这个问题最好通过调整figsizewidth来解决;这是我使用 figsize=(2,7)width=0.3 的输出:

enter image description here

顺便说一下,如果你使用 pandas 包装器(我还导入了 seaborn,而不是解决方案所必需的,但在我看来使情节更漂亮,更现代):

import pandas as pd        
import seaborn
seaborn.set()

df = pd.DataFrame(groups, index=group_labels)
df.plot(kind='bar', legend=False, width=0.8, figsize=(2,5))
plt.show()

enter image description here

关于python - 在 matplotlib 中设置分组条形图之间的间距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11597785/

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