matplotlib 条形图:间隔条形图

Posted

技术标签:

【中文标题】matplotlib 条形图:间隔条形图【英文标题】:matplotlib bar chart: space out bars 【发布时间】: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)旋转轴标签 【参考方案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)

【讨论】:

以上是关于matplotlib 条形图:间隔条形图的主要内容,如果未能解决你的问题,请参考以下文章

Python使用matplotlib绘制柱状图(bar plot)实战:水平条形图垂直条形图分组条形图堆叠条形图

Matplotlib 条形图:对角刻度标签

python 条形图使用matplotlib.pyplot.bar(已经给出了条形图)

python使用matplotlib绘制水平条形图并在条形图上添加实际数值标签实战

Python matplotlib可视化:用Matplotlib的bar_label函数自定义条形图的数值标签用Matplotlib的bar_label函数为条形图添加数值标记(在每一个条形的中部)

窗口大小更改导致我的条形图覆盖 - Matplotlib