【问题标题】:Trying to add more space between labels in x-axis on pyplot histogram试图在pyplot直方图的x轴标签之间添加更多空间
【发布时间】:2014-08-31 14:33:26
【问题描述】:

我正在尝试从字典中制作一个看起来像这样的直方图

words = {'STORES': 8, 'ELECTRIC': 15, 'CAPITAL': 7, 'FLORIDA': 6, '-CL': 35, 'NATURAL': 6, 'ELECTRONICS': 8, 'INDUSTRIES': 35, 'GROUP': 42, 'POWER': 11, '&': 38, 'HOLDINGS': 14, 'GAS': 10, 'GENERAL': 15, 'PRODUCTS': 8, 'AMERICA': 8, 'NATIONAL': 7, 'A': 31, 'B': 7, 'CENTRAL': 7, 'INTL': 14, 'ENERGY': 21, 'CORP': 288, 'SYSTEMS': 18, 'REALTY': 8, 'TECHNOLOGIES': 13, 'TECHNOLOGY': 6, 'PROPERTIES': 6, 'RESOURCES': 16, 'FIRST': 9, 'STACKOVERFLOW': 10, 'INDS': 8, 'VERIZON': 13, 'OF': 10, 'COMMUNICATIONS': 9, 'AMERICAN': 34, 'HELLO': 6}

x 轴表示 words.key(),y 轴表示 words.values()。我尝试了几种方法来制作漂亮的直方图。以下是我的尝试之一...

import matplotlib.pyplot as pl
import numpy as np

ax = pl.subplot(111)
width=1.0
ax.bar(range(0,len(words)), words.values(), width=width/2)
ax.set_xticks(np.arange(0,len(words)) + width/2)
ax.set_xticklabels(words.keys())
pl.show()

此代码的问题是 x 轴上的标签相互重叠,这使得直方图难以理解。谁能给我解决这种情况的方法?我真的很想控制标签之间的距离。此外,最好让所有条形都在中心排列而不是从左侧排列。

提前致谢!

【问题讨论】:

    标签: python-2.7 matplotlib histogram


    【解决方案1】:

    一些建议:

    • 改变图形的大小。最重要的是要注意比率:如果条形图中的列太多,它应该有一个更宽的比率。

    • 更改文本的方向。旋转 90 度使其更清晰。

    我尝试了以下代码,效果很好:

    import matplotlib.pyplot as pl
    import numpy as np
    
    fig = pl.figure(figsize=(18,4)) #sets a different size (inches wide, inches tall)
    ax = pl.subplot(111)
    width=1.0
    ax.bar(range(0,len(words)), words.values(), width=width/2)
    ax.set_xticks(np.arange(0,len(words)) + width/2)
    ax.set_xticklabels(words.keys())
    
    locs, labels = pl.xticks() #gets labels
    pl.setp(labels, rotation=90) #sets rotation of the labels
    
    pl.show()
    

    您也可以更改字体,但我认为这里不需要。

    【讨论】:

    • 感谢您的回复!我尝试了旋转,没有更多的重叠发生,但是在查看它的图片时,单词的底部被切断了..可以以某种方式解决吗?也可以在最后一个小节之后删除空白区域吗?
    • 奇怪...在 iPython Notebook 上,底部没有被切断,这就是我没有注意到它的原因。 pl.tight_layout() 似乎解决了这个问题。
    • 这对我有用。感谢您到目前为止的答案!但是可以手动设置列的宽度吗?在我看来,我们正在绕过直接解决方案......