3 votes

La barre de couleurs de Matplotlib ne dessine pas les bords aux extrémités

Lors de la création d'une barre de couleur matplotlib, il est possible de définir drawedges a True qui sépare les couleurs de la barre de couleurs par des lignes noires. Toutefois, lorsque la barre de couleur est étendue à l'aide de extend='both' Les lignes noires aux extrémités n'apparaissent pas. S'agit-il d'un problème ? Est-il possible de dessiner ces bords autrement ?

Voici le code :

import matplotlib as mpl
import numpy as np
import matplotlib.pyplot as plt  
from matplotlib.colors import from_levels_and_colors

my_cmap = mpl.cm.viridis
bounds = np.arange(10)
nb_colors = len(bounds) + 1
colors = my_cmap(np.linspace(100, 255, nb_colors).astype(int))
my_cmap, my_norm = from_levels_and_colors(bounds, colors, extend='both')

plt.figure(figsize=(5, 1))
ax = plt.subplot(111)
cbar = mpl.colorbar.ColorbarBase(ax, cmap=my_cmap, norm=my_norm, orientation='horizontal', drawedges=True)
plt.subplots_adjust(left=0.05, bottom=0.4, right=0.95, top=0.9)
plt.show()

et le chiffre qu'il donne :

enter image description here

2voto

r-beginners Points 11668

Je me suis penché sur la question et j'ai trouvé un moyen de changer la couleur de la bordure et des lignes verticales de la barre de couleur. J'ai utilisé cette méthode pour les changer en rouge. Le résultat que j'ai obtenu était que le contour étendu était rouge, donc je suppose que j'ai simplement tiré les petits côtés du rectangle normal de la barre de couleur vers la gauche et la droite. J'ai trouvé cette réponse utiles.

cbar.outline.set_edgecolor('red')
cbar.dividers.set_color('red')

enter image description here

Je pense donc que la seule façon de procéder est d'ajouter des lignes verticales.

import matplotlib as mpl
import numpy as np
import matplotlib.pyplot as plt  
from matplotlib.colors import from_levels_and_colors

my_cmap = mpl.cm.viridis
bounds = np.arange(10)
nb_colors = len(bounds) + 1
colors = my_cmap(np.linspace(100, 255, nb_colors).astype(int))
my_cmap, my_norm = from_levels_and_colors(bounds, colors, extend='both')

plt.figure(figsize=(6, 2))
ax = plt.subplot(111)
cbar = mpl.colorbar.ColorbarBase(ax, cmap=my_cmap, norm=my_norm, orientation='horizontal', drawedges=True)
# update
cbar.outline.set_edgecolor('red')
cbar.dividers.set_color('red')
plt.axvline(max(bounds), color='red', alpha=0.3, linewidth=3.5)
plt.axvline(min(bounds), color='red', alpha=0.3, linewidth=3.5)

plt.subplots_adjust(left=0.05, bottom=0.4, right=0.95, top=0.9)
plt.show()

enter image description here

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X