2012-04-06 14 views
6

'u genellikle eps biçiminde kaydedildiği zaman saydamlığı işleyebilecek şekilde rasterleştirmek için kullanıyorum, ancak rasterleştirme aynı zamanda eksen etiketlerini ve konuşma etiketlerini de bulanıklaştırıyor, bu nedenle yalnızca tümüyle değil yalnızca eksen içindeki yamaları rasterleştirmenin bir yolu var rakam? veya eps formatını şeffaflıkla dışa aktarmak için daha iyi bir yer var mı? Teşekkürler. matplotlib Artists rasterleştirilecek gibiMatplotlib'deki etiketleri bulanıklaştırmadan bir çizim nasıl daha iyi rasterleştirilir?

+1

Sadece set_zorder'ı ve set_rasterization_zorder'ı keşfettim, sanırım yararlı olurlar, ama yine de belgeleri kazmaya çalışıyorlar, yine de herhangi bir yardım takdir ediliyor. – nye17

+0

'pdf' kullanamaz mısınız? Rasterizasyon olmadan şeffaflığı koruyacaktı. – Avaris

+0

@Avaris maalesef pdf kullanamıyorum, ancak eps ile yapışmak zorundayım, bu yüzden rasterleştirme tek çıkış yolu gibi görünüyor. – nye17

cevap

7

, sanatçı (http://matplotlib.sourceforge.net/api/artist_api.html) türetilmiş herhangi bir sınıf True için anahtar rasterized seti ile rasterleştirilen edilebilir. Böylece sadece yamalarınızı rasterleştirebilirsiniz.

Bazı kombinasyonları denedim ve işe yarıyor gibi görünüyor. Ancak kalite çok iyi görünmüyor (ayrıca bkz. http://www.mail-archive.com/[email protected]/msg13276.html).

import numpy as np 
import matplotlib.pyplot as plt 


def add_patch(ax, **kwargs): 
    if 'rasterized' in kwargs and kwargs['rasterized']: 
     ax.set_rasterization_zorder(0) 
    ax.fill_between(np.arange(1, 10), 1, 2, zorder=-1, **kwargs) 
    ax.set_xlim(0, 10) 
    ax.set_ylim(0, 3) 
    if 'alpha' in kwargs and kwargs['alpha'] < 1: 
     txt = 'This patch is transparent!' 
    else: 
     txt = 'This patch is not transparent!' 
    ax.text(5, 1.5, txt, ha='center', va='center', fontsize=25, zorder=-2, 
      rasterized=True) 

fig, axes = plt.subplots(nrows=4, sharex=True) 
add_patch(axes[0], alpha=0.2, rasterized=False) 
add_patch(axes[1], alpha=0.2, rasterized=True) 
add_patch(axes[2], rasterized=False) 
add_patch(axes[3], rasterized=True) 

plt.tight_layout() 
plt.savefig('rasterized_transparency.eps') 

ben tarayıcıda göstermek için png eps dönüştürülen:

rasterized_transparency.png

Ayrıca bakınız: How to save figures to pdf as raster images in matplotlib.

+0

Teşekkürler, örneğini denerim ve kendi kodlarım ASAP üzerinde test ettireceğim. Cevap o zamana kadar kabul edilecektir ;-). – nye17

2

Dpi'yi belirtirseniz sonuçlar daha iyi olur; bu da oldukça düşük bir değere varsayılan gibi görünüyor. Örneğin,

plt.savefig('rasterized_transparency.eps',dpi=200) 

son satırı değiştirin ve dosya 4.5m büyür ve% 200 büyütme kadar Acrobat iyi görünüyor. Ancak, saydamlığı destekleyen muhtemelen daha kompakt biçimlerin olduğunu kabul ediyorum.

İlgili konular