2016-11-24 6 views
2

Ich benutze Python 3.5.2 und Matplotlib 1.5.3.Verlust Kantenwerte in letzten Colormap Subplot Matplotlib

Ich mache einige Colormaps mit der gemeinsamen "y" -Achse. Das Problem ist, dass ich beim Platzieren der Farbleiste im letzten Teilplot den ersten und letzten Tick auf der X-Achse verliere. Wenn Sie jedoch die Zahl vergrößern (z. B. figsize = (12,3)), erscheint an den Rändern des anderen Teilplots etwas weißer Raum.

import numpy as np 
import matplotlib.pyplot as plt 

matrix = np.random.random((10, 10, 3)) 
fig = plt.figure(figsize=(10, 3)) # Try a figsize=(12, 3) 

for i in range(3): 
    if i == 0: 
     ay1 = plt.subplot(1, 3, i+1) 
    else: 
     plt.subplot(1, 3, i+1, sharey=ay1) 
    plt.imshow(matrix[:, :, i], interpolation='nearest') 
    if i == 2: 
     plt.colorbar() 
plt.show() 

Was ist der richtige Weg?

Antwort

2

Die Verwendung von sharey macht nur Sinn, wenn Sie Bilder unterschiedlicher Größe verwenden. Aber wenn die Bilder unterschiedlich groß sind, gibt es in einigen Teilen der Figur nichts - das weiß gestrichen wird.

Auf der anderen Seite, wenn Sie die gleichen Bilder wie hier haben, brauchen Sie sharey nicht zu verwenden. In diesem Fall können Sie Ihre Daten einfach grafisch darstellen und eine Farbleiste hinzufügen.

import numpy as np 
import matplotlib.pyplot as plt 

matrix = np.random.random((10, 10, 3)) 

fig, ax = plt.subplots(1,3, figsize=(12, 3)) 
plt.subplots_adjust(left=0.05, right=0.85) 
for i in range(3): 
    im = ax[i].imshow(matrix[:, :, i], interpolation='nearest') 
    ax[i].set_aspect("equal") 

plt.draw() 
p = ax[-1].get_position().get_points().flatten() 
ax_cbar = fig.add_axes([0.9,p[1], 0.02, p[3]-p[1]]) 
plt.colorbar(im, cax=ax_cbar) 

plt.show() 

enter image description here

Verwandte Themen