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)实战:水平条形图垂直条形图分组条形图堆叠条形图
python 条形图使用matplotlib.pyplot.bar(已经给出了条形图)
python使用matplotlib绘制水平条形图并在条形图上添加实际数值标签实战
Python matplotlib可视化:用Matplotlib的bar_label函数自定义条形图的数值标签用Matplotlib的bar_label函数为条形图添加数值标记(在每一个条形的中部)