首页 > 解决方案 > 使用 Joyplot、FigureCanvasTkAgg 和 tkinter 时 x 轴标签的刻度重叠

问题描述

简而言之,我正在使用 python 中的 joypy 库绘制一个joyplot(ridgeplot)在此处输入图像描述

如您在上面看到的,我想制作两个图并将它们并排放置在一个 tkinter 框架(应用程序)中以进行可视化。我正在为这个问题苦苦挣扎大约三天;x 轴的刻度(以及图形的标题)一个图形与另一个图形重叠。我相信这是 plt.subplots 的问题(不是 tkinter 或 FigureCanvasTkAgg )。我在其他帖子中已经找到的代码部分周围加上了两个星号,以解决这个问题。我应该有两个并排的图像,它们的 x 轴应该从 0 到 70 开始。所以我使用以下代码:

子图准备:

                                            axi = 0
                                        plt.close('all')
                                        fig, axes = plt.subplots(1, len(2,
                                                                 **figsize=(7, 4)**, facecolor='w', squeeze=True,
                                                                 edgecolor='k',**sharex=False,sharey=False**)
                                        **fig.subplots_adjust(hspace=1, wspace=1)**
                                        **fig.tight_layout()**

循环从这里开始(allints 是迭代器)并且数据帧被称为 plt_data_piv

                                        for allints in [1,2]:
                                            plt_data_piv = fp_data_concat[data[items] == allints ]

情节是使用joyplot创建的。ax=axes[axi] 在子图中输入每个图。除此之外,我还阅读了 figss 和 axess 中 joyplot 的输出,以限制和修改 joyplot 中的 x 轴,joyplot 本身就是一个子图。

                                            figss, axess=joypy.joyplot(plt_data_piv,ax=axes[axi] ,
                                                                      by='season', legend=True, alpha=0.6,
                                                                      bins=len(fp_data_concat['agespect'].unique()),
                                                                      column=plt_data_piv.columns[
                                                                             2:len(plt_data_piv.columns)].tolist(),
                                                                      labels=labels,
                                                                      color=['blue', 'green', 'red', 'yellow',
                                                                             'brown'],
                                                                      grid="y", linewidth=1, figsize=(1, 1))

在这里,我使用 [-1] 来影响在 joyplot 中创建的子图中的最后一个无花果(但它与我正在创建的子图无关)

                                            axess[-1].set_xticks(np.arange(0, 70 + 1, 5.0), minor=False)
                                            axess[-1].tick_params(axis="both", labelsize=10)
                                            axess[-1].axis(xmin=0, xmax=70)
                                            # axess[axi].axis('off')
                                            # axes[axi].set_xlim([0,70])
                                            axi = axi + 1

在这里,我将每个无花果放在 FigureCanvasTkAgg 中。

                                        canvas = FigureCanvasTkAgg(fig,
                                                                       master=plt_frame)  # A tk.DrawingArea.
                                        canvas.draw()                                            
                                        plt_frame.update()

因为我正在处理私人数据,不幸的是,我无法共享它们以进行复制。对不起。

标签: python-3.xmatplotlibtkintertkinter-canvas

解决方案


推荐阅读