matplotlib 条形图仅显示最后一个tick_label

pgx2nnw8  于 2023-06-06  发布在  其他
关注(0)|答案(2)|浏览(159)

我想用matplotlib绘制随机数的条形图。我单独设置了每个tick_label,但只显示最后一个。哪一个是正确的?使用tick_label属性还是使用plot set_xticks函数?

import matplotlib.pyplot as plt
import random as r
        
for i in range(10):
    plt.bar(i,i*2, r.randint(1,2) , tick_label=i)
plt.show()

5jdjgkvh

5jdjgkvh1#

假设你不能提前确定酒吧的数量(在进入循环之前),你可以用下面的代码在数字上循环并设置刻度。如果你有文本标签,在答案的底部还有另一个处理字符串的例子。

import matplotlib.pyplot as plt
import random as r

# initialize labels list
ticklabels = list()

for i in range(10):

    # add a bar to the plot
    plt.bar(i, r.randint(1, 2))

    # append tick to the list & set current axes with
    ticklabels.append(i)
    plt.xticks(range(len(ticklabels)), labels=ticklabels)

plt.show()

这将生成以下图片

然后,如果你碰巧在循环中也得到了一个字符串标签,你可以将它与plt.xticks函数的"label"关键字参数一起使用:

import matplotlib.pyplot as plt
import random as r

from string import ascii_uppercase as letters

ticklabels = list()

for i in range(10):

    # add a bar to the plot
    plt.bar(i, r.randint(1, 2))

    # append current tick label
    ticklabels.append(letters[r.randint(1, 25)])
    
    # set xaxis ticklabel
    plt.xticks(range(len(ticklabels)), labels=ticklabels)

这将产生下面的图片(随机标签)。

xqnpmsa8

xqnpmsa82#

正如注解所指出的,每次调用plt.bar(tick_label=i)时,刻度标签都会被覆盖。要解决这个问题,您可以将tick format命令移动到for循环之外:

for i in range(10):
    plt.bar(i,i*2, r.randint(1,2))
    
plt.xticks(range(10))

输出:

相关问题