Как реализовать colorbar рядом с pcolor map в tkinter (python)? - PullRequest
0 голосов
/ 03 апреля 2019

Я создаю интерактивный инструмент с помощью tkinter и хочу отобразить маскированный набор данных по долготе и широте (маскирование на основе выбора в списках) с помощью pcolor.Я хочу цветную полосу рядом с картой.Идея состоит в том, что если вы нажмете кнопку «выбрать», карта будет отображаться, а если вы нажмете кнопку еще раз, карта будет обновлена.

Я попытался использовать matshow вместо pcolor, чтобы увидеть, работает ли черчение или нет.Это работало, однако я не работал, когда я использовал crs = ccrs.PlateCarree ().Для части обновления я попытался создать новый холст.

import tkinter as tk
from tkinter import Tk, Listbox, MULTIPLE, END, Button
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
import numpy as np
import cartopy.crs as ccrs
import cartopy.io.img_tiles as cimgt
import matplotlib.pyplot as plt

class ClassName: 
    def __init__(self,master):
        self.master = master

        canvas = tk.Canvas(master, width = 1000, height = 350) # create the canvas (tkinter module)
        canvas.pack()

        list = tk.Listbox(master,height=10,width=22)
        list.pack(side=tk.LEFT)
        for i in [2,3,4,5]:
            list.insert(tk.END,i)
        canvas.create_window(105,105,window=list)

        select_button = tk.Button(master,text='Select variables',command=lambda: self.selection(list,master))
        canvas.create_window(100,205,window= select_button)

    def selection(self,list,master):
        values= [list.get(idx) for idx in list.curselection()]
        shape = np.random.randint(1, values[0], [5,5])

        lon = np.arange(5)
        lat = np.arange(5)

        fig = Figure(figsize=(4,4))
        a = fig.add_subplot(111)
        tiler = cimgt.StamenTerrain(desired_tile_form='')
        ax = plt.axes(projection=tiler.crs)
        ax.set_extent((0,4,0,4),crs=ccrs.PlateCarree())
        ax.add_image(tiler,10, cmap='gray')
        c = ax.pcolor(lon,lat,shape,transform=ccrs.PlateCarree())
        fig.colorbar(c)

        canvas1 = tk.Canvas(master,width = 500, height = 400)
        canvas1.pack(side=tk.LEFT)

        canvas1 = FigureCanvasTkAgg(fig)
        canvas1.get_tk_widget().pack(side=tk.LEFT)
        canvas1.draw_idle()
        canvas1.create_window(100,500,window=c)

   root = Tk()
    my_gui = ClassName(root)
    root.mainloop()

Я ожидаю, что карта pcolor будет показана с цветной полосой рядом с ней, и эта карта будет обновлена.Однако цветовая полоса может остаться, я не против обновить ее.

Мои реальные результаты таковы, что я получаю кучу ошибок, и ничего не отображается.

1 Ответ

0 голосов
/ 11 апреля 2019

Я сделал это по-другому, и теперь изображение цветовой панели работает. Это то, что я сделал.

    fig = Figure(figsize=(4,4))
    ax = fig.add_subplot(111)
    c = ax.pcolor(lon,lat,shape)
    fig.colorbar(c,ax=ax,fraction=0.046,pad=0.04)
    canvas = FigureCanvasTkAgg(fig,master)

    canvas.get_tk_widget().grid(row=0,column=self.clicks)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...