当前位置: 首页 > 知识库问答 >
问题:

如何在matplotlib直方图中的xaxis中创建等间距区间,当面元不是等间距时?[重复]

归星驰
2023-03-14

我希望matplotlib直方图以等间距的xax显示数据,尽管它的bin的值不是等间距的。我该怎么做?目前,年龄组“0-6”、“7-12”、“13-16”、“17-20”的条形图看起来比我的其他数据更薄,“17-20”的条形图与21-30的条形图重叠。xtick标签也重叠。我如何解决这些问题?

#!/usr/bin/env python3.6
# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import numpy as np


male_ages =   [66.0, 37.0, 2.0, 56.0, 8.0, 56.0, 56.0, 31.0, 15.0, 41.0, 17.0, 40.0, 45.0, 0.5, 41.0, 27.0, 53.0, 64.0, 53.0,]
female_ages = [53.0, 56.0, 3.0, 31.0, 9.0, 73.0, 47.0, 18.0, 31.0, 28.0, 48.0, 44.0, 32.0, 42.0, 42.0, 39.0, 40.0, 38.0, 2.0 ]

age_bins_label = [ '0-6', '7-12', '13-16', '17-20', '21-30',
                   '31-40', '41-50', '51-60', '61-70', '71-80',
                   '81-90', '91-100', '101-110', '111-120' ]
age_bins = [0, 6, 12, 16, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110 ]
xmax = max( male_ages, female_ages)
data = [ male_ages, female_ages ] 
colors = [ 'orange', 'pink']
labels = [ 'male', 'female' ]

fig, axs = plt.subplots(2, 2, 'all', tight_layout=True, sharey=True )
axs[0, 0].hist( data, bins=age_bins, color=colors, rwidth=0.9, align='left',
                stacked=False, label=labels )
axs[0, 0].legend(prop={'size': 10})
axs[0, 0].set_title('bars with legend')
axs[0, 0].get_xaxis().set_label_text( label='Age Groups', fontweight='bold' )
axs[0, 0].get_yaxis().set_label_text( label='Confirmed Cases', fontweight='bold' )

for ax in axs.flat:
    ax.label_outer()

# Set x-axis
#xlabels = [ str(i) for i in age_bins[1:] ]
xlabels = age_bins_label
N_labels = len(xlabels)
plt.xticks( age_bins, xlabels )

plt.show()

共有1个答案

云欣嘉
2023-03-14

我建议你使用< code>np.histogram

    import matplotlib.pyplot as plt
    import matplotlib.ticker as ticker
    import numpy as np

    male_ages =   [66.0, 37.0, 2.0, 56.0, 8.0, 56.0, 56.0, 31.0, 15.0, 41.0, 17.0, 40.0, 45.0, 0.5, 41.0, 27.0, 53.0, 64.0, 53.0,]
    female_ages = [53.0, 56.0, 3.0, 31.0, 9.0, 73.0, 47.0, 18.0, 31.0, 28.0, 48.0, 44.0, 32.0, 42.0, 42.0, 39.0, 40.0, 38.0, 2.0 ]

    age_bins_label = [ '0-6', '7-12', '13-16', '17-20', '21-30',
               '31-40', '41-50', '51-60', '61-70', '71-80',
               '81-90', '91-100', '101-110', '111-120' ]
    age_bins = [0, 6, 12, 16, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120 ]

    fig, ax = plt.subplots()
    ax.bar(x = age_bins_label,
           height = np.histogram(male_ages, bins = age_bins)[0], 
           alpha=0.5, 
           label='male')
    ax.bar(x = age_bins_label,
           height = np.histogram(female_ages, bins = age_bins)[0], 
           alpha=0.5, 
           label='female')

    plt.legend(loc='upper right')

后果

 类似资料:
  • 我正在尝试使用matplotlib创建条形图。 x轴数据是带有年份的列表:[19501960、19701、980、19901、995-2015] y轴数据是一个数量与年数相等的列表。 这是我的代码: 结果是:条与条之间有太多的空间 正如你所看到的,1950-1960年之间的差距是巨大的。我怎么能做到这一点,这样1950-1995年酒吧之间就没有间隙。我知道它的间隔为10年,但看起来并不好。 任何帮

  • 设置行距 各个文字行之间的垂直间距称为行距。对于罗马文字,行距是从一行文字的基线到它的上一行文字的基线的距离。基线是一条看不见的直线,大部分文字都位于这条线的上面。可以在同一段落中应用一个以上的行距量;但是,文字行中的最大行距值决定该行的行距值。 注意:在使用横排亚洲文字时,您可以指定行距的度量方式(从基线到基线,或从某一行的顶部到下一行的顶部)。 行距为 6 点的 5 点文字(左图)和行距为 1

  • 问题内容: 我敢肯定有一个解决此问题的简单方法。基本上,如果我有两列,如何在它们之间添加一个空格? 例如,如果html是: 输出将是彼此相邻的两列,占据了页面的整个宽度。假设将宽度设置为,则每个div都会很宽。 如果我想在两者之间留出空间,该如何实现?显然,通过引导程序自动使div大小成为补偿大小的每个大小 问题答案: 您可以使用此处记录的类来实现列之间的间距。间距是一致的,因此所有列均正确排列。

  • 原关闭原因未解决 我用这些代码创建了3个水平条形图。正如你所看到的,在所有图表上,y标签之间的行间距是非常一致的,因为每个图形的高度都是独立定制的。 但是这些数字没有水平排列,因为y标签的文本长度不同。因此,我使用子图来对齐图形,如下所示: 但这种技术破坏了每个子图中y标签之间的行间距。有没有人有更好的主意来使所有子图上的y标签之间的行间距均匀,比如第一张图像?谢啦

  • 我基于matplotlib中的:热图和pcolor? 我了解了如何在Matplotlib中更改记号标签和轴标签之间的分隔,但这不是我所需要的 如何固定标签的位置,使其与刻度对齐?

  • 我很难弄清楚如何在XML文件中为回收器视图设置填充和边距,以实现这种行为,既保持回收器列表项之间的相等间距,又保持父项之间的相同间距。 ParenStart<-10DP->ListItem<-10DP->ListItem<-10DP->ParentEnd 同时能够滚动屏幕的全宽度(父级)。 如果不在父项上设置填充,而只在列表项上设置填充,则会出现以下问题:ParenStart<-10DP->Lis