2012-09-04 15 views
10

मैंने एसओ, गूगलेड को ?pdf पढ़ा है, और एक प्लॉट के साथ एक पीडीएफ के रूप में एक साजिश को बचाने की संभावना के रूप में सूख आ गया है जिसे स्टेच किया जा सकता है और पीडीएफ दर्शक मार्जिन में बंद। मैं जो बात कर रहा हूं उसका एक उदाहरण यूएसजीएस क्वाड टॉपो-मैप्स है, जिसे कई परतों के साथ पीडीएफएस के रूप में डाउनलोड किया जा सकता है, जैसे this (ज़िपित पीडीएफ)।आर में एक स्तरित पीडीएफ कैसे बचाएं (स्वीवे के माध्यम से?)

पीडीएफ() मदद फ़ाइल में निम्नलिखित वाक्य अशुभ लगता है, लेकिन मैं यह भी जांच करने के लिए कि मैं इसे बदल नहीं कर रहा हूँ चाहता था:

The R graphics model does not distinguish graphics objects at the level 
of the driver interface. 

मैं Illustrator में बहुस्तरीय पीडीएफ के बचाने के लिए सक्षम होने के लिए इस्तेमाल किया, लेकिन अब मेरे पास इस कार्यक्रम में नहीं है। शायद कोई आर के भीतर से एक कामकाज के बारे में सोच सकता है? डेटा मैं मैप करने के लिए उपयोग कर रहा हूँ बड़े हैं, लेकिन यहाँ एक खिलौना उदाहरण है:

pdf("2objects.pdf") 
plot(NULL, type = "n",xlim = c(0,1),ylim = c(0,1)) 
rect(0,.7,.7,0,border = "blue",lwd=2) 
rect(.3,1,1,.3,border = "red",lty=2,lwd=2) 
dev.off() 

यह इस (यह एक png है, लेकिन इसके बाद के संस्करण एक PDF दे देंगे) enter image description here

मैं था की तरह लग रहा लाल और नीले रंग के बक्से को दृश्यता वाले परतों के रूप में सक्षम करने की आवश्यकता है जिसे पीडीएफ दर्शक के भीतर से चालू और बंद किया जा सकता है।

बहुत धन्यवाद!

संपादित करें: thread in R-help (पुनः: @mnel) मिला, और ऐसा संभव नहीं है। अगर कोई निफ्टी आर-टस्टिक वर्कअराउंड के साथ आया है तो भी मैं इस सवाल को खुला छोड़ दूंगा।

संपादित करें (5 सितंबर, 2012): मैंने स्वीवे के माध्यम से ऐसा करने की कोशिश की, और here पोस्ट किए गए वर्कअराउंड का उपयोग करके आंशिक सफलता हासिल की। यह विधि 'परत' के साथ एक पीडीएफ उत्पन्न करती है जिसे छवियों के नीचे हाइपरलिंक्ड टेक्स्ट का उपयोग करके चालू और बंद किया जा सकता है। ऐसा करने के लिए यह 'एनीमेशन' चाल का उपयोग करता है। हालांकि यह अभी भी मेरा अंतिम वांछित परिणाम नहीं है, लेकिन इसका लाभ विशेष पीडीएफ दर्शकों के आधार पर नहीं है। मैं अभी भी यह देखने के लिए इंतजार करूँगा कि कोई स्वेव दस्तावेज़ में परतों, उर्फ ​​ओसीजी को करने का कोई तरीका पोस्ट करता है, जिसे मैं स्वचालित कर सकता हूं।

संपादित करें (13 सितंबर, 2012): मैंने ऊपर वर्णित कोड का उपयोग करके एक उत्तर के रूप में अब तक मेरी प्रगति पोस्ट की है। मैं इसे अमेरिका के भीतर विभिन्न प्रशासनिक और सांख्यिकीय सीमाओं के ओवरले के साथ कोड में कोई बदलाव नहीं होने के साथ एक और जटिल वास्तविक दुनिया की स्थिति में काम करने में सक्षम था। इस मामले में, मैंने अभी अलग नक्शा ओवरले layer-0.pdf, layer-1.pdf, आदि नाम दिया है, और यह बिना किसी त्रुटि के काम करता है। मुझे अभी भी उम्मीद है कि आखिरकार कुछ बेहतर पॉप अप हो जाएगा।

धन्यवाद आप टिप्पणी सभी के लिए

+1

आप इस प्राप्त करने के लिए यदि आप [ 'tikzDevice'] (http://cran.r-project.org/src/contrib/Archive/tikzDevice/) का उपयोग काम करने के लिए सक्षम हो सकता है और' tikz कॉन्फ़िगर कर सकते हैं 'या' pgf' आपको परतों के साथ एक पीडीएफ देने के लिए। दुर्भाग्यवश पैकेज संग्रहित है, लेकिन यह सुंदर ग्राफिक्स (या कम से कम किया गया था, जब मैंने इसे 2 साल पहले इस्तेमाल किया) – mnel

+0

धन्यवाद @mnel, मैं अब स्वीवे के माध्यम से इसे आजमा रहा हूं और अगर मैं कुछ भी लेकर आया तो पोस्ट करूंगा । –

+0

मुझे आश्चर्य है कि क्या ImageMagick दो अलग-अलग लोगों में से एक स्तरित पीडीएफ बना सकता है? – Aaron

उत्तर

1

मैं ggplot के माध्यम से इस लक्ष्य को हासिल करने में सक्षम हूँ।

library(ggplot2) 
df <- data.frame(x = c(1,10), y = c(20,40), class = 1:2) 
layered_plot <- ggplot(df, aes(xmin = x, xmax = x + 1, ymin = y, ymax = y + 2, fill = class)) + 
geom_rect() + 
opts(legend.position = "none") 
# Now save this as pdf 
ggsave(layered_plot, file="p1.pdf") 

enter image description here

(इस उदाहरण के लिए सिर्फ png संस्करण है लेकिन जब मैं Illustrator में pdf खोलते हैं, तो मैं अलग-अलग परतों के रूप में की जरूरत बंद कर सकते हैं)।

enter image description here

+0

क्या यह हो सकता है इलस्ट्रेटर की एक विशेषता? ऐसा लगता है कि एक पीडीएफ आयात करने में, इलस्ट्रेटर सभी ऑब्जेक्ट तत्वों को व्यक्तिगत वस्तुओं में तोड़ देता है। मैं ऐसे समाधान की उम्मीद कर रहा था जो इलस्ट्रेटर को घुमाने के दौरान एक बॉक्स के लिए एक परत और दूसरी परत के लिए एक परत बना सकता है। हालांकि धन्यवाद! –

+0

सुनिश्चित नहीं है कि यह एक चित्रकार मुद्दा है। लेकिन अगर आपको केवल एक तत्व या दो बंद करना है, तो यह ठीक काम करता है। आप इसके चारों ओर एक बॉक्स खींचकर और समूह को मारकर तत्वों (अक्षों की तरह) को जल्दी से समूहित कर सकते हैं। इससे वस्तुओं की संख्या कम हो जाएगी। – Maiasaura

+0

'.svg' एक्सटेंशन के साथ फ़ाइल को सहेजने के बारे में क्या? यह परतों (समान रूप से) को संरक्षित रखेगा लेकिन इलस्ट्रेटर को पूरी तरह से बाधित करेगा (यदि आपके पास खोलने के लिए एक और मुफ्त प्रोग्राम है)। – Maiasaura

1

लग रहा है (tex) animation उत्तर की तरह सबसे अच्छा मैं अब के साथ आ सकते हैं। निम्नलिखित .Rnw फ़ाइल मध्य में एक आकृति के साथ एक पीडीएफ बनाएगी, और इसके नीचे 2 टेक्स्ट हाइपरलिंक्स, जो लाल और नीले रंग के बक्से की स्वतंत्रता को टॉगल करेंगी।मुझे टेक्स कोड मिला जो इस काम को here बनाता है। मैंने @ Aaron के ocgtools सुझाव को अभी तक नहीं देखा है, लेकिन वहां पहुंच जाएगा। आपके सुझावों के लिए सभी को धन्यवाद!

\documentclass{article} 
%----------------------------------------------------------------%\ 
\usepackage[OT1]{fontenc} 
\usepackage{Sweave} 
\usepackage{animate} 
\usepackage{hyperref} 
\usepackage[margin=0.4in]{geometry} 
%----------------------------------------------------------------% 

\makeatletter 
% command to create a toggle link 
\newcommand{\ShowHideLayer}[3]{% 
    % #1: anim No. (zero-based), 
    % #2: layer No. (zero-based), 
    % #3: link text 
    \leavevmode% 
    \pdfstartlink user { 
    /Subtype /Link 
    /Border [\@pdfborder]% 
    /A << 
     /S/JavaScript 
     /JS (
     \if at [email protected]% 
      if(a#1.fr[#2].state==true){ 
      a#1.fr[#2].state=false; 
      }else{ 
      a#1.fr[#2].state=true; 
      } 
     \else 
      if (a#1.fr[#2].display==display.visible){ 
      a#1.fr[#2].display=display.hidden; 
      }else{ 
      a#1.fr[#2].display=display.visible; 
      } 
      this.dirty=false; 
     \fi 
    ) 
    >> 
    }#3% 
    \pdfendlink% 
} 

% command to create a link to show/hide all layers 
\newcommand{\ShowHideAll}[2]{% 
    % #1: anim No. (zero-based), 
    % #2: link text 
    \leavevmode% 
    \pdfstartlink user { 
    /Subtype /Link 
    /Border [\@pdfborder]% 
    /A << 
     /S/JavaScript 
     /JS (
     var countvisible=0; 
     for(var i in a#1.fr){ 
      \if at [email protected] 
      if(a#1.fr[i].state==true){countvisible++;} 
      \else 
      if (a#1.fr[i].display==display.visible){countvisible++;} 
      \fi 
     } 
     if(countvisible){ 
      for(var i in a#1.fr){ 
      \if at [email protected] 
       a#1.fr[i].state=false; 
      \else 
       a#1.fr[i].display=display.hidden; 
       this.dirty=false; 
      \fi 
      } 
     } 
     else{ 
      for(var i in a#1.fr){ 
      \if at [email protected] 
       a#1.fr[i].state=true; 
      \else 
       a#1.fr[i].display=display.visible; 
       this.dirty=false; 
      \fi 
      } 
     } 
    ) 
    >> 
    }#2% 
    \pdfendlink% 
} 
\makeatother 

\begin{document} 

% heres the R-making of the plots, saved to working directory, 
% which should be the folder containing this .Rnw file 
% 3 versions of the same plot, one for each layer 
<<echo = FALSE, hide = TRUE>>= 
pdf("layer-0.pdf") 
plot(NULL, type = "n", xlim = c(0, 1), ylim = c(0, 1), xlab = "", ylab = "") 
dev.off() 

pdf("layer-1.pdf") 
plot(NULL, type = "n", xlim = c(0, 1), ylim = c(0, 1), axes = FALSE, xlab = "", ylab = "") 
rect(0, .7, .7, 0, border = "blue", lwd = 2) 
dev.off() 

pdf("layer-2.pdf") 
plot(NULL, type = "n", xlim = c(0, 1), ylim = c(0, 1), axes = FALSE, xlab = "", ylab = "") 
rect(.3, 1, 1, .3, border = "red", lty = 2, lwd = 2) 
dev.off() 
@ 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
\begin{center} 
    %animated layer-set No. 0 
    %           v-- frame rate ignored 
    \animategraphics[width=1\linewidth,step]{1}{layer-}{0}{2} 

    \ShowHideLayer{0}{1}{toggle red box}\\ 
    \ShowHideLayer{0}{2}{toggle blue box}\\ 
\end{center} 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
\end{document} 
संबंधित मुद्दे