2013-02-25 15 views
9

Yayınlanan bir here benzeri bir sorunum var. Farkı, sharex ve sharey öznitelikleri aracılığıyla eksenleri paylaşan iki alt çizimi çizdiğimde çizim alanı içinde istenmeyen beyaz boşluklar oluşmasıdır. Beyaz boşluklar, autoscale(False) ayarlandıktan sonra bile devam eder. Örneğin, yukarıda belirtilen mesaja yanıt olarak benzer bir kod kullanılarak:matplotlib.pyplot.imshow: "sharex" ve "sharey" niteliklerini kullanırken grafiğin içindeki boşlukları kaldırıyor

import matplotlib.pyplot as plt 
import numpy as np 

fig = plt.figure() 
ax = fig.add_subplot(2, 1, 1) 
ax.imshow(np.random.random((10,10))) 
ax.autoscale(False) 
ax2 = fig.add_subplot(2, 1, 2, sharex=ax, sharey=ax) # adding sharex and sharey 
ax2.imshow(np.random.random((10,10))) 
ax2.autoscale(False) 
plt.show() 

sonuç this görüntüde.

Ayrıca here önerilerine göre ax.set_xlim(0, 10) ve ax.set_xbound(0, 10)'u denedim, ancak boşuna. Ekstra beyaz alanlardan nasıl kurtulabilirim? Herhangi bir fikir takdir edilecektir.

cevap

14

olarak ekleyerek here önerdi.

(documentation)

+0

Bu yardımcı olabilir, ancak en boy oranını kaybetme konusunda sakıncası yoksa ve kullanılabilir tüm eksenleri doldurmak istemiyorsanız başka bir yol eklerim: 'imshow()' içinde 'aspect = 'auto'' işlevini kullanın. – PlasmaBinturong

1

Sorun, add_subplot'un kullanılmasına yardımcı olan faydalı makinelerdir. Şeklini yeniden boyutlandırırsanız, beyaz alan miktarının değiştiğine dikkat edin.

şu (eğer rakam yeniden boyutu kadar)

import matplotlib.pyplot as plt 
import numpy as np 

fig = plt.figure(figsize=(5, 5)) 
ax = fig.add_axes([.3, .55, .35, .35]) 
ax.imshow(np.random.random((10,10))) 
ax.autoscale(False) 
ax2 = fig.add_axes([.3, .05, .35, .35], sharex=ax, sharey=ax) 
ax2.imshow(np.random.random((10,10))) 
ax2.autoscale(False) 

plt.show() 

Bu axes nesne, paylaşılan eksenlerinin boyutu/konumu arasında kötü etkileşim gibi görünüyor ve eşit boy oranı iş gibi görünüyor imshow'dan. Eğer kene dışarı yaşayabilirsen

, ben bunun için matplotlib üzerinde github bir sorunu açılış değer olduğunu düşünüyorum

ax.set_axis_off() 
ax2.set_axis_off() 

yapabilirsiniz.

+1

Ayar 'yönü = auto' bu durumda beyaz boşluk kurtulmak, ancak bu her zaman ideal değildir. Matplotlib github hakkında önerdiğiniz gibi bir sorun açtım - teşekkürler. – mlynn

3

olarak plt.subplots kullanma:

fig, ax = plt.subplots(nrows=2, ncols=1, sharex=True, sharey=False) 
ax[0].imshow(np.random.random((10,10))) 
ax[0].autoscale(False) 
ax[1].imshow(np.random.random((10,10))) 
ax[1].autoscale(False) 

Ben eksenleri içinde hiçbir beyaz boşluklarla this figure olsun. plt.subplots veya fig.subplots_adjust içinde figsize'u kullanarak daha iyi eksen oranları elde edebilirsiniz.

ax.set_adjustable('box-forced') 
ax2.set_adjustable('box-forced') 

sorunu çözer:

+0

Teşekkürler. Bununla birlikte, eksenlerin aralıklarının, şeklin yeniden boyutlandırılmasıyla değişmediği bir çözüm istiyorum. – mlynn

+0

@mlynn: ne demek istiyorsun? Eksenlerin her zaman aynı mutlak boyutta olmasını ister misin (5x5 cm gibi)? veya aynı boy oranını, şekil büyüklüğünden bağımsız olarak sürdürmelerini ister misiniz? –

+0

İstediğim şey, her alt çizimin, görüntünün tam boyutlarını (bu durumda, 10x10 piksel) göstermesi, aynı boyut oranının, şekil boyutundan bağımsız olarak korunmasıdır. Temel olarak, yukarıdaki orijinal kodumda 'sharex' ve' sharey' seçeneklerini eklemezsem, istediğim arazileri alırım. Şeklini yeniden boyutlandırabilirim ve her alt çizim buna göre yeniden boyutlandırabilir. Paylaşılacak eksenleri tercih etmemin nedeni, bir altpipte yakınlaştırma yaptığımda, diğer alt-çizimin de buna göre yakınlaştırılmasını istiyorum. – mlynn

İlgili konular