【问题标题】:matplotlib bar chart: space out barsmatplotlib 条形图:间隔条形图
【发布时间】:2017-03-27 06:47:30
【问题描述】:

如何使用 matplotlib 条形图增加每个条形之间的空间,因为它们不断将自己塞到中心。(这是它目前的样子)

import matplotlib.pyplot as plt
import matplotlib.dates as mdates
def ww(self):#wrongwords text file

    with open("wrongWords.txt") as file:
        array1 = []
        array2 = [] 
        for element in file:
            array1.append(element)

        x=array1[0]
    s = x.replace(')(', '),(') #removes the quote marks from csv file
    print(s)
    my_list = ast.literal_eval(s)
    print(my_list)
    my_dict = {}

    for item in my_list:
        my_dict[item[2]] = my_dict.get(item[2], 0) + 1

    plt.bar(range(len(my_dict)), my_dict.values(), align='center')
    plt.xticks(range(len(my_dict)), my_dict.keys())

    plt.show()

【问题讨论】:

  • 您可能还想使用plt.xticks(rotation = 90)旋转轴标签

标签: python python-3.x matplotlib


【解决方案1】:

尝试替换

plt.bar(range(len(my_dict)), my_dict.values(), align='center')

plt.figure(figsize=(20, 3))  # width:20, height:3
plt.bar(range(len(my_dict)), my_dict.values(), align='edge', width=0.3)

【讨论】:

  • 我不断收到这个错误 'ValueError: invalid alignment: left'
  • 抱歉出现错误。 Align 选项有 2 个选项:{‘edge’, ‘center’}。
  • 已经固定了条的间距,干杯。然而,x 轴上的单词仍然挤在一起。我如何让它垂直?
  • plt.xticks(range(len(my_dict)), my_dict.keys(), rotation='vertical')
  • width 解决了这个问题很好,但实际上,width 是指条的宽度而不是条之间的空间。
【解决方案2】:

有两种方法可以增加条形之间的空间 供参考的是绘图功能

plt.bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)

减小条的宽度

plot 函数有一个 width 参数,用于控制条形的宽度。如果减小宽度,条之间的空间将自动减小。默认情况下,您的宽度设置为 0.8。

width = 0.5

缩放 x 轴,使条形之间的距离更远

如果要保持宽度不变,则必须在 x 轴上放置条的位置留出空间。您可以使用任何缩放参数。例如

x = (range(len(my_dict)))
new_x = [2*i for i in x]

# you might have to increase the size of the figure
plt.figure(figsize=(20, 3))  # width:10, height:8

plt.bar(new_x, my_dict.values(), align='center', width=0.8)

【讨论】:

    【解决方案3】:

    这个答案改变了条之间的空间,它还旋转了 x 轴上的标签。它还可以让您更改图形大小。

    fig, ax = plt.subplots(figsize=(20,20))
    
    # The first parameter would be the x value, 
    # by editing the delta between the x-values 
    # you change the space between bars
    plt.bar([i*2 for i in range(100)], y_values)
    
    # The first parameter is the same as above, 
    # but the second parameter are the actual 
    # texts you wanna display
    plt.xticks([i*2 for i in range(100)], labels)
    
    for tick in ax.get_xticklabels():
        tick.set_rotation(90)
    

    【讨论】:

      【解决方案4】:

      将您的 x 轴限制从略微负值开始设置为比绘图中的条形数略大的值,并在 barplot 命令中更改条形的宽度

      例如,我为一个只有两个条的条形图做了这个

      ax1.axes.set_xlim(-0.5,1.5)

      【讨论】:

        猜你喜欢
        • 2020-12-02
        • 2015-12-25
        • 2016-01-02
        • 1970-01-01
        • 2018-08-22
        • 1970-01-01
        • 2016-09-11
        • 1970-01-01
        相关资源
        最近更新 更多