Mische tradtionelle und grid-Graphik in r

Wie erstelle ich Grafiken, was ist zu beachten?

Moderatoren: EDi, jogo

Antworten
sonolom

Mische tradtionelle und grid-Graphik in r

Beitrag von sonolom »

Ich will traditionelle Graphik (plotrix) und Grid-Graphik mischen.
plotrix::pie3d ist die traditionelle Kuchengraphik aus dem plotrix-package.
Die Viewport-Funktionen sind aus dem grid package.
Ich habe auch mit der Funktion baseViewports() aus dem gridBase-package experimentiert, welche 3 omineuse viewports "inner","figure" und "plot"
erzeugt, und für das Mischen der Graphiken gedacht ist. Ich habe aber niergends
eine gute Beschreibung der Wirkungen dieser Viewports gesehen und was sie genau tun.
Auch die Steuerung der Größen dieser viewports ist ein Problem.
Deshalb bin ich bei folgendem Code gelandet. Die Funktion #A steuert genau die Größen
dieser verschiedenen Bereiche. Ein grüner Balken
wird nach der Kuchengraphic gezeichnet weil er sonst überschrieben wird.
Dies geht bei svg-Graphiken aber leider nicht bei eps.
Dort werden mit diesem Code pro EPS zwei Seiten erzeugt: eine Leere und die gewünschte. Kommentiere ich pie3d aus so erscheint nur eine Seite mit grünem balken.

Code: Alles auswählen

library(gridBase)
library(grid)

bv_setEPS1<-function(width1,height1)#set eps boundingbox
{
   args<-list(width=width1,height=height1)
   force <- list(onefile = TRUE, horizontal = FALSE, paper = "special")
   args[names(force)] <- force
   do.call("ps.options", args)
}


pievalues<-c(3,3,3,3)
dunkelblau<-rgb(0,158,224,maxColorValue=255)
mittelblau<-rgb(94,197,237,maxColorValue=255)
hellblau<-rgb(162,218,244,maxColorValue=255)
hellgelb<-rgb(255,255,252,maxColorValue=255)
mittelgelb<-rgb(255,249,189,maxColorValue=255)
dunkelgelb<-rgb(255,236,0,maxColorValue=255)
pieColors<-c(dunkelblau,mittelblau,hellblau,hellgelb,mittelgelb,dunkelgelb)

h<-17.9*0.75*(15/25.2)/2.54
w<-17.9*0.75/2.54
sc<-0.75*17.9/25.2

bv_setEPS1(width1=w,height1=h)
ifont<-"Helvetica"

postscript(file="filename.eps")#zeichne EPS

pushViewport(viewport(  #A
   layout=grid.layout(3,1,widths=sc*unit(c(25.2),c("cm")),
               heights=sc*unit(c(0.5,2,12.5),c("cm","cm","cm")))))
             
pushViewport(viewport(layout.pos.col=1, layout.pos.row=3))#main region 
par(mai=c(0,0,0,0))
layout(matrix(c(1,2),byrow=TRUE,ncol=2),widths=c(1,1))#lcm(6),lcm(6)))
       scal<-1.5
bisector<-plotrix::pie3D(x=pievalues,edges=100,radius=0.9*scal,height=0.16*scal,theta=pi/18*4,start=pi/2,border=par("fg"),col=pieColors,labels=NULL,labelpos=NULL,labelcol=par("fg"),labelcex=0.75*scal,
                sector.order=NULL,explode=0.0,shade=0.4,main="",pty="s")
popViewport()#main region
            
#oberer grüner balken 
pushViewport(viewport(layout.pos.col=1, layout.pos.row=2,
           gp=gpar(fill=rgb(216,232,200,maxColorValue=255),
           col=rgb(216,232,200,maxColorValue=255) )))
grid.rect()
#beschriftung oberer balken
grid.text("grafik",
          gp=gpar(col="black",fontfamily=ifont,cex=sc),
          just=c("center","center"))
popViewport()#oberer balken
            
popViewport()#A
            
dev.off()
sonolom

Re: Mische tradtionelle und grid-Graphik in r

Beitrag von sonolom »

Um den Code zu testen ersetze "filename.eps" durch den absoluten Pfad z.B.
"C:/filename.eps". Du soltest grid, gridBase und plotrix package installiert haben.
Antworten