Matplotlib设置条形图间隔

3

我不知道如何控制从文件中读取数据的下面代码中条形之间的空间。是否有任何方法可以调整/重新调整条形之间的空间(而不是条形的宽度)?

输入文件

1 4500
2 5000
3 3000
4 4000
5 1000
6 5000

#!/usr/bin/python
import numpy as np
import pylab as plot
import matplotlib.pyplot as plt
import numpy, scipy, pylab, random
from matplotlib.ticker import MultipleLocator
import matplotlib as mpl
from matplotlib.ticker import MaxNLocator


with open("file.txt", "r") as f:
    x=[]
    y=[]
    for line in f:
        if not line.strip() or line.startswith('@') or line.startswith('#'): continue
        row = line.split()
        x.append(float(row[0]))
        y.append(float(row[1]))


fig = plt.figure(figsize=(3,2))
ax = plt.subplot(111)


plt.ylim(0, 6000)
ax.yaxis.set_major_locator(MaxNLocator(6))
ax.yaxis.set_minor_locator(MultipleLocator(500))
plt.xlim(0+0.5, 7-0.5)


bars=plt.bar(x,y, width=0.2, color='blue', edgecolor='black', align='center', linewidth=0.5)

bars[0].set_facecolor('gray')
bars[1].set_facecolor('orange')
bars[2].set_facecolor('green')
bars[3].set_facecolor('yellow')
bars[4].set_facecolor('cyan')
bars[5].set_facecolor('deeppink')


labels=['A', 'B', 'C', 'D', 'E', 'F']
plt.xticks(x, labels, rotation='45', rotation_mode='anchor', ha='right')

plt.ylabel('Values (m)', fontsize=7)

for axis in ['top','bottom','left','right']:
  ax.spines[axis].set_linewidth(0.5)

plt.subplots_adjust(top=0.97)
plt.subplots_adjust(bottom=0.05)
plt.subplots_adjust(left=0.07)
plt.subplots_adjust(right=0.98)


plt.tick_params(axis='both', which='major', labelsize=6)
plt.tick_params(axis='both', which='minor', labelsize=0)


plt.savefig("plot.png", dpi=300, bbox_inches='tight')

enter image description here


3
如果条形图的宽度固定,而您想要改变各个条之间的间距,唯一的方法就是改变图表的宽度,这是您想要的吗? - HYRY
或者增加 x 范围 - plt.xlim(0+0.5, 10-0.5) - AChampion
间隔由条形图的宽度和X轴刻度或点决定:间隔=(x2-x1)-宽度。 - hdrz
改变图形的宽度和增加 X 范围并没有帮助。 - erhan
1个回答

0

解决方案(我尝试了matplotlib版本3.5.2)在这行代码中:

x.append(float(row[0]))

如果你做类似这样的事情:
x.append(float(row[0]) + 0.5 / float(row[0]))

你会注意到条形图之间的空间变化。在上一行中,我将添加一个组件到x坐标,并且如果row [0]的值增加,该组件将稍微小一些。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接