Как создать цветную панель cutomize с помощью matplotlib - PullRequest
0 голосов
/ 20 ноября 2018

Это мой пример кода. Здесь мне нужно изменить цветовую панель как перетаскиваемую цветовую панель и добавить цвета списка в colorbar.i я пробовал так много примеров в Google, но я не получил правильный вывод. Может кто-нибудь, пожалуйста, помогите мне, как добавитьболее индивидуализированные цвета и цветовая панель работают как перетаскиваемый.

Пример кода:

import matplotlib.pyplot as plt
import numpy as np
from scipy.ndimage import gaussian_filter
import pandas as pd
from matplotlib.ticker import FormatStrFormatter
import os
import matplotlib.colors
class DraggableColorbar(object):
    def __init__(self, cbar, mappable):
        self.cbar = cbar
        self.mappable = mappable
        self.press = None
        self.cycle = sorted([i for i in dir(plt.cm) if hasattr(getattr(plt.cm,i),'N')])
        self.index = self.cycle.index(cbar.get_cmap().name)
    def connect(self):
        """connect to all the events we need"""
        self.cidpress = self.cbar.patch.figure.canvas.mpl_connect(
            'button_press_event', self.on_press)
        self.cidrelease = self.cbar.patch.figure.canvas.mpl_connect(
            'button_release_event', self.on_release)
        self.cidmotion = self.cbar.patch.figure.canvas.mpl_connect(
            'motion_notify_event', self.on_motion)
        self.keypress = self.cbar.patch.figure.canvas.mpl_connect(
            'key_press_event', self.key_press)
        self.cidscroll = self.cbar.patch.figure.canvas.mpl_connect(
            'scroll_event', self.scrolled)
    def scrolled(self):
        pass
    def on_press(self, event):
        """on button press we will see if the mouse is over us and store some data"""
        if event.inaxes != self.cbar.ax: return
        self.press = event.x, event.y

    def key_press(self, event):
        if event.key=='down':
            self.index += 1
        elif event.key=='up':
            self.index -= 1
        if self.index<0:
            self.index = len(self.cycle)
        elif self.index>=len(self.cycle):
            self.index = 0
        cmap = self.cycle[self.index]
        self.cbar.set_cmap(cmap)
        self.cbar.draw_all()
        self.mappable.set_cmap(cmap)
        self.mappable.get_axes().set_title(cmap)
        self.cbar.patch.figure.canvas.draw()
    def on_motion(self, event):
        'on motion we will move the rect if the mouse is over us'
        if self.press is None: return
        if event.inaxes != self.cbar.ax: return
        xprev, yprev = self.press
        dx = event.x - xprev
        dy = event.y - yprev
        self.press = event.x,event.y
        scale = self.cbar.norm.vmax - self.cbar.norm.vmin
        perc = 0.03
        if event.button==1:
            self.cbar.norm.vmin -= (perc*scale)*np.sign(dy)
            self.cbar.norm.vmax -= (perc*scale)*np.sign(dy)
        elif event.button==3:
            self.cbar.norm.vmin -= (perc*scale)*np.sign(dy)
            self.cbar.norm.vmax += (perc*scale)*np.sign(dy)
        self.cbar.draw_all()
        self.mappable.set_norm(self.cbar.norm)
        self.cbar.patch.figure.canvas.draw()
    def on_release(self, event):
        """on release we reset the press data"""
        self.press = None
        self.mappable.set_norm(self.cbar.norm)
        self.cbar.patch.figure.canvas.draw()
    def disconnect(self):
        """disconnect all the stored connection ids"""
        self.cbar.patch.figure.canvas.mpl_disconnect(self.cidpress)
        self.cbar.patch.figure.canvas.mpl_disconnect(self.cidrelease)

fileName = os.getcwd()
data = pd.read_csv(fileName+'/ps.csv', names = ['x','y','z','colour'])
var = data.y.unique()
var = sorted(var)
totalSquares = len(var)
data1 = data[data.y==var[1]]
plot = plt.tricontourf(data1.x,data1.z,data1.colour,100)
ax = plt.gca()                            # get the axis
ax.set_ylim(ax.get_ylim()[::-1])        # invert the axis
ax.xaxis.tick_top()                     # and move the X-Axis
ax.yaxis.tick_left()
ax.xaxis.set_major_formatter(FormatStrFormatter('%d m'))
ax.yaxis.set_major_formatter(FormatStrFormatter('%d m'))
cbar = plt.colorbar(format='%05.2f')
cbar = DraggableColorbar(cbar,plot)
cbar.connect()
plt.show()

это образец изображения цветовой панели

enter image description here

...