【发布时间】:2020-02-26 22:33:34
【问题描述】:
我希望我的结果图看起来像一个直方图,条形之间完全没有空格。我正在使用 matplotlib 的 axes.bar()。我查看了文档,但我从那里尝试过的没有任何帮助(设置 pad=0,设置 xticks)。我希望每个条的宽度 = 0.1,因为这是刻度之间间隔的大小,我想完全填充图表。
这是我的代码
colors = self.data[index].colors # a list of the color each bar should have
depth = self.data[index].depth # the depth in meters, increases by set interval (0.1)
data = np.ones(len(cluster_labels))
axis.bar(x=depth, height=data, color=colors, width=0.1, align='edge')
axis.tick_params(axis='x', pad=0)
axis.get_xaxis().set_visible(True)
axis.get_yaxis().set_visible(True)
axis.set_xlim(xmin=self.ruler_pix_to_m(idx_begin), xmax=self.ruler_pix_to_m(idx_end))
axis.set_ylim(ymin=0, ymax=1)
axis.set_axis_on()
我想要的是一个图表,我能看到的只有条形图,从刻度 2.2 到刻度 16.78,如下所示:
如何指定条形之间完全没有空间?如果 matplotlib 条形图不起作用,还有其他方法可以获得我想要的绘图类型吗?任何帮助将不胜感激!
更新:我摆脱了辅助轴并更改了宽度 = 1,现在图表如下所示:
但是,我不希望图表末尾的空白,但尝试使用 .set_xlim(xmin=x_start, xmax=x_end) 会导致以下结果:
如您所见,x 轴完全弄乱了我使用的 x 限制是条形图 x 轴中的第一个和最后一个数据点,所以我不确定是什么导致范围变得如此小。
【问题讨论】:
-
由于您似乎是 Stack Overflow 的新手,您应该阅读How to create a Minimal, Complete, and Verifiable example
-
您似乎有 2 个 x 轴。而且您似乎是通过顶轴的轴坐标指定宽度。对于该轴,您需要宽度=1。显示的输出似乎不是来自显示的代码。顺便说一句,您可以使用
axis.tick_params(axis='x', length=0)隐藏刻度。如果条形高度是恒定的,那么只写axis.bar(..., height=1, ...)会更具可读性。 -
嗨 JohanC,非常感谢您的回复,我的第二个轴是我添加的辅助轴,您能解释一下该轴需要 width=1 是什么意思吗?此外,我将尝试提供一个可运行的示例。
-
因为这个代码是一个更大的 sn-p 的一部分,我不知道如何绘制 matplotlib.figure.Figure 对象来准确地重现这个(我在 tkinter 画布中显示这个图) matplotlib.figure.Figure() 和 matplotlib.pyplot 有很大区别吗?
-
好吧,只需在对 bar 的调用中将宽度设置为 0。您的axis.bar 已以axis 为顶轴绘制。
标签: python matplotlib