Python 如何使xticklabel只显示数据列表中的点?

Python 如何使xticklabel只显示数据列表中的点?,python,matplotlib,tkinter,Python,Matplotlib,Tkinter,我正在创建一个python应用程序来显示数据列表的甘特图。但是当我运行应用程序时,我得到了这个-> 事实上,我需要的是Xticklabel应该是数据列表中与图中相同端点处的点。类似于此的内容->为糟糕的图片编辑感到抱歉 这就是我迄今为止所做的: self.f = Figure(figsize=(10, 8), dpi=100) self.ax = self.f.add_subplot(2,1,2) ind = numpy.arange(1) # the x locations for the

我正在创建一个python应用程序来显示数据列表的甘特图。但是当我运行应用程序时,我得到了这个->

事实上,我需要的是Xticklabel应该是数据列表中与图中相同端点处的点。类似于此的内容->为糟糕的图片编辑感到抱歉

这就是我迄今为止所做的:

self.f = Figure(figsize=(10, 8), dpi=100)
self.ax = self.f.add_subplot(2,1,2)

ind = numpy.arange(1)  # the x locations for the groups
width = .95

data = [2,4,5,7,8,12,16]

patch_handles = []

left = 1

for i, d in enumerate(data):
    patch_handles.append(self.ax.barh(ind, d, align='center', left=left, yerr=0.4, color='y'))
    left += d

for j in range(len(patch_handles)):
    for i, patch in enumerate(patch_handles[j].get_children()):
        bl = patch.get_xy()
        x = 0.5 * patch.get_width() + bl[0]
        y = 0.5 * patch.get_height() + bl[1]
        self.ax.text(x, y, "dd", ha='center')

self.ax.set_yticks(ind)
self.ax.set_yticklabels("G")
self.ax.set_xticklabels(data)
self.ax.set_xlabel('Scores')

canvas = FigureCanvasTkAgg(self.f, master=root)
canvas.show()
canvas.get_tk_widget().pack(side=TOP, fill=BOTH, expand=1)
编辑:更改@scroopy noopers的答案代码后的屏幕截图

除了使用set_xticklabels设置记号位置处显示的值外,还可以使用set_xtick设置记号的位置:

self.ax.set_yticks(ind)
self.ax.set_yticklabels("G")
self.ax.set_xticks(numpy.cumsum(data))  # Set positions correctly
self.ax.set_xticklabels(data)
self.ax.set_xlabel('Scores')
答案来自于

编辑:正如OP在下面评论的那样,这导致了其特定绘图的一对一错位。他们能够通过简单的调整来修复错位:

self.ax.set_xticks(numpy.cumsum(data) + 1)

我得到了数据列表中的点,但它不在准确的点上。我将更新问题中的屏幕截图。我从他的代码中找到了答案:我只需要更新->self.ax.setxticksnumpy.cumsumdata+1书籍,就像你需要考虑最后一条粗体垂直线和封闭矩形边之间的间隙一样。好吧。即使没有垂直线,我也可以在图片问题的编辑部分的相同位置看到点“16”