如何在matplotlib中向上移动整个图表?

更改为不同的子图时,如何在 matplot 中移动整个图。

问题是我使用按钮在不同的图表之间切换,但 x_labels 与按钮重叠。那么有没有办法在更改图表时简单地将图表向上移动一点,以便按钮和 x_labels 不会彼此重叠?

或者是否有另一个(更好的)解决方案来解决这个问题?

这是一张图片,您可以在其中看到我的问题:

http://img3.mukewang.com/613096200001c0cb16570907.jpg

       下面是一些示例代码:


import matplotlib.pyplot as plt

from matplotlib.widgets import Button

import datetime



class Index(object):


    def start(self, event=None):

        ax.clear()

        ax.set_title("Start")

        x_values = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]

        y_values = [10, 20, 15, 1, 5]

        ax.set_xticklabels(x_values, rotation=25)

        print(ax.get_position())

        ax.bar(x_values, y_values)

        plt.draw()


    def next(self, event):

        ax.clear()

        ax.set_title("Next")

        x_values = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]

        y_values = [20, 15, 10, 5, 1]

        ax.set_xticklabels(x_values, rotation=25)

        print(ax.get_position())

        ax.bar(x_values, y_values)

        plt.draw()


    def prev(self, event):

        ax.clear()

        ax.set_title("Previous")

        x_values = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]

        y_values = [1, 5, 10, 15, 20]

        ax.set_xticklabels(x_values, rotation=25)

        print(ax.get_position())

        ax.bar(x_values, y_values)

        plt.draw()


ax  = plt.gca()

callback = Index()

callback.start()


axprev = plt.axes([0.59, 0.002, 0.1, 0.075])

bprev = Button(axprev, 'Previous')

bprev.on_clicked(callback.prev)

axstart = plt.axes([0.7, 0.002, 0.1, 0.075])

bstart = Button(axstart, 'Start')

bstart.on_clicked(callback.start)

axnext = plt.axes([0.81, 0.002, 0.1, 0.075])

bnext = Button(axnext, 'Next')

bnext.on_clicked(callback.next)


plt.show()



吃鸡游戏
浏览 1059回答 1
1回答

收到一只叮咚

一种快速而肮脏的方法是使用 subplots_adjustplt.subplots_adjust(bottom=0.2)它很脏,因为您必须手动修改值(例如0.2),直到找到一个看起来正确的数字。但是,似乎需要一些摆弄来定位axprev,axstart和axnext。更好的方法是使用matplotlib.gridspec.GridSpec以下方法布局轴:import matplotlib.gridspec as gridspecgs = gridspec.GridSpec(10, 40) ax = plt.subplot(gs[:7, :])axprev = plt.subplot(gs[9:, 18:24])axstart = plt.subplot(gs[9:, 26:32])axnext = plt.subplot(gs[9:, 34:40])例如,import matplotlib.pyplot as pltimport matplotlib.gridspec as gridspecfrom matplotlib.widgets import Buttonimport datetimeclass Index(object):    def start(self, event=None):        ax.clear()        ax.set_title("Start")        x_values = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]        y_values = [10, 20, 15, 1, 5]        ax.set_xticklabels(x_values, rotation=25)        print(ax.get_position())        ax.bar(x_values, y_values)        plt.draw()    def next(self, event):        ax.clear()        ax.set_title("Next")        x_values = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]        y_values = [20, 15, 10, 5, 1]        ax.set_xticklabels(x_values, rotation=25)        print(ax.get_position())        ax.bar(x_values, y_values)        plt.draw()    def prev(self, event):        ax.clear()        ax.set_title("Previous")        x_values = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]        y_values = [1, 5, 10, 15, 20]        ax.set_xticklabels(x_values, rotation=25)        print(ax.get_position())        ax.bar(x_values, y_values)        plt.draw()gs = gridspec.GridSpec(10, 40) ax = plt.subplot(gs[:7, :])axprev = plt.subplot(gs[9:, 18:24])axstart = plt.subplot(gs[9:, 26:32])axnext = plt.subplot(gs[9:, 34:40])callback = Index()callback.start()bprev = Button(axprev, 'Previous')bprev.on_clicked(callback.prev)bstart = Button(axstart, 'Start')bstart.on_clicked(callback.start)bnext = Button(axnext, 'Next')bnext.on_clicked(callback.next)plt.show()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python