Matplotlib:关闭7x1子图中的大多数轴,但保留底部(重命名)刻度

时间:2017-09-28 17:45:09

标签: python python-3.x matplotlib plot

我有一堆由子图组成的Nx1图(大多数是7x1,但有些是5x1等)。我们的想法是有3个区域和7个不同时间长度的定时事件,我希望按时间顺序查看每个定时事件,并在区域中花费几分钟的时间图。我希望每个子图都有正确的y轴标签刻度(分钟)以及标签(在这种情况下为P1到P7,但有些是P1到P5等),但所有x轴都关闭除了< / strong>对于底部的一个是我自己的刻度,用文字表示。我来自herehere

我遇到的问题是最底部的子图不仅有我的文字文字(&#39;区域1&#39;,&#39;区域2&#39; ..),但也有无意义的数字对我来说(从0到1的刻度),并且y轴具有正确的子图标记(从0到10左右),但是从0到1的全部标记是无意义的。我想要研究无意义的全部x轴数,以及总体无意义的y轴数。

如何从整体情节中删除不需要的刻度数?

import matplotlib.pyplot as plt
import numpy as np

plotlist = [[0, 0, 690], [0, 0, 1030], [0, 0, 470], [30, 10, 730], [0, 0, 460], [20, 0, 540], [0, 0, 380]]
numpresses = 7

fig = plt.figure()

objects = ('Zone 1', 'Zone 2', 'Zone 3')
y_pos = np.arange(len(objects))
plt.title('Time spent in zones (minutes)')
plt.ylabel('Minutes spent in zone')

for subploti in range(numpresses):
    ax = fig.add_subplot(numpresses, 1, (subploti + 1))
    axes = plt.gca()
    axes.get_xaxis().set_visible(False)
    axes.set_ylabel('P %i' %(subploti + 1))

    mins = [x / 60. for x in plotlist[subploti]]
    plt.bar(y_pos, mins, align='center', alpha=0.5)

plt.xticks(y_pos, objects)
axes = plt.gca()
axes.get_xaxis().set_visible(True)



plt.show()

Plot with extraneous ticks

1 个答案:

答案 0 :(得分:0)

好的,事实证明解决方案是使用共享轴并提前创建子图的数量并为它们编制索引。需要更加努力herehere。如果其他人发现这个新代码是

import matplotlib.pyplot as plt
import numpy as np

plotlist = [[0, 0, 690], [0, 0, 1030], [0, 0, 470], [30, 10, 730], [0, 0, 460], [20, 0, 540], [0, 0, 380]]
numpresses = 7

fig, axtuple = plt.subplots(numpresses, sharex=True, sharey=True) #, squeeze=True)

objects = ('Zone 1', 'Zone 2', 'Zone 3')
y_pos = np.arange(len(objects))
plt.ylabel('Minutes spent in zone')
plt.xlabel('Distances (feet)')
axtuple[0].set_title('Time spent in zones (minutes)')

for subploti in range(numpresses):
    mins = [x / 60. for x in plotlist[subploti]]
    axtuple[subploti].bar(y_pos, mins, align='center', alpha=0.5)
    axtuple[subploti].set_ylabel('P %i' %(subploti + 1))

plt.xticks(y_pos, objects)
plt.show()