2012-04-06 14 views
6

मैं आमतौर पर ax.set_rasterized(True) का उपयोग इस आंकड़े को रास्टराइज करने के लिए करता हूं ताकि eps प्रारूप में सहेजे जाने पर पारदर्शिता को संभाला जा सके, लेकिन रास्टरराइजेशन धुरी लेबल और टिकलबेल को भी धुंधला कर देता है, तो पूरे अक्ष के बजाय अक्ष के भीतर केवल पैच को रास्टराइज करने का कोई तरीका है आंकड़ा? या पारदर्शिता के साथ ईपीएस प्रारूप निर्यात करने के लिए बेहतर है? धन्यवाद।matplotlib में लेबल को धुंधला किए बिना प्लॉट को बेहतर ढंग से कैसे बढ़ाया जाए?

+1

मैंने बस set_zorder और set_rasterization_zorder की खोज की, मुझे लगता है कि वे सहायक होंगे, लेकिन अभी भी प्रलेखन खोद रहे हैं, फिर भी किसी भी मदद की सराहना की जाती है। – nye17

+0

क्या आप 'पीडीएफ' का उपयोग नहीं कर सकते? यह rasterisation के बिना पारदर्शिता को संरक्षित करेगा। – Avaris

+0

@ आवरिस दुर्भाग्यवश मैं पीडीएफ का उपयोग नहीं कर सकता, लेकिन ईपीएस के साथ रहना है, इसलिए रास्टरराइजेशन एकमात्र तरीका है। – nye17

उत्तर

7

matplotlib Artists rasterized जा सकता है, किसी भी वर्ग कलाकार (http://matplotlib.sourceforge.net/api/artist_api.html) से व्युत्पन्न True के लिए कीवर्ड rasterized सेट के साथ rasterized जा सकता है। तो आप केवल अपने पैच रास्टरराइज कर सकते हैं।

मैंने अभी कुछ संयोजनों की कोशिश की और ऐसा लगता है कि यह काम करता है। हालांकि गुणवत्ता बहुत अच्छी नहीं लगती है (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') 

मैं ब्राउज़र में यह दिखाने के लिए PNG में eps परिवर्तित:

rasterized_transparency.png

यह भी देखें: How to save figures to pdf as raster images in matplotlib

+0

धन्यवाद, मैं आपके उदाहरण का प्रयास करूंगा और इसे अपने कोड ASAP पर परीक्षण करूँगा। तब तक उत्तर स्वीकार किया जाएगा ;-)। – nye17

2

परिणाम बेहतर होते हैं यदि आप डीपीआई निर्दिष्ट करते हैं - जो कि बहुत कम मूल्य के लिए डिफ़ॉल्ट लगता है। उदाहरण के लिए,

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

को अंतिम पंक्ति को बदलने और फ़ाइल 4.5M करने के लिए बढ़ता है, और 200% आवर्धन करने के लिए एक्रोबेट में ठीक लग रहा है। हालांकि मैं मानता हूं कि संभवतः अधिक कॉम्पैक्ट प्रारूप हैं जो पारदर्शिता का समर्थन करते हैं।