R Yaletoolkit: Как изменить размер шрифта на метках на блестящих линиях?

StackOverflow https://stackoverflow.com/questions/8337980

Вопрос

Я использую эту функцию для быстрой и простой sparklines С R, но я не могу понять, как изменить размер шрифта, чтобы избежать уродливых перекрытий меток оси Y. Вот мой код (см. Ниже для воспроизводимого примера):

sparklines(gamma.df, sub=c(1:23),outer.margin = unit(c(2, 2, 2, 2), "cm"))

и полученный сюжет:

enter image description here

Кажется, я могу полностью подавить ось Y с

sparklines(gamma.df, sub=c(1:23),yaxis=FALSE,outer.margin = unit(c(2, 2, 2, 2), "cm"))

Но то, что я действительно хочу, - это просто сократить числа на отметках клеток (и добавить серую заливку под линию, но, похоже, мне придется рисовать многоугольники на экране, что, вероятно, достаточно проблем, чтобы заслужить отдельный вопрос ... и другой пакет).

А документация предполагает, что GPAR может быть актуальным: «Во всех случаях, когда необходим список графических параметров, действительные имена параметров одинаковы, как и действителен при передаче GPAR в соответствующем вызове». Но мне нужна небольшая помощь, чтобы понять это, так как ни одна из моих попыток не попадает никуда (то же самое для cex.axis и Axis ()). Любые эксперты на r grid Графика там? Ссылки на хорошо документированный совершенно другой подход (GGPLOT2?), Который дает более качественные результаты в стиле Sparkline, также приветствуются.

Вот несколько примеров данных и кода, которые повторяют мою проблему:

x <- data.frame(V = rnorm(1000), W = rnorm(1000), X = rnorm(1000), Y = rnorm(1000), Z = rnorm(10))
sparklines(x,outer.margin = unit(c(2, 2, 2, 2), "cm")) 

И вот полученный пример график данных с уродливыми перекрывающимися числами на оси Y Tickmarks:

enter image description here

ОБНОВИТЬ: С использованием очень полезный plot Код с @geek-on-acid и некоторый код с форума Tufte (см. Ниже), я придумал альтернативный метод Sparkline, который не использует YaleToolkit Пакет и выглядит хорошо ... вот воспроизводимый пример (на самом деле всего две строки, но аннотировано здесь для моего образования):

     x <- data.frame(V = rnorm(1000), W = rnorm(1000), X = rnorm(1000), Y = rnorm(1000), 
     Z = rnorm(1000)) # get a bit of data

    par(mfrow=c(ncol(x),1), #sets number of rows in space to number of cols in data frame x
    mar=c(1,0,0,0), #sets margin size for the figures
    oma=c(4,5,4,4)) #sets outer margin

    for (i in 1:ncol(x)){ # setup for statement to loops over all elements in a list or vector
        plot(x[,i], #use col data, not rows from data frame x
        col="grey",lwd=0.5, #make the line grey and thin
        axes=F,ylab="",xlab="",main="",type="l"); #suppress axes lines, set as line plot
        axis(2,yaxp=c(min(x[,i]),max(x[,i]),2), # y-axis: only show tickmarks for max and min values of col
        cex.axis=1.1,las=1, # shrink fontsize slightly, make text horizontal for easy reading
        at=c(round(min(x[,i]),3),round(max(x[,i]),3))); #specify where tickmark numbers go and round them to keep it tidy
        axis(2,yaxp=c(min(x[,i]),max(x[,i]),2),col="white",tcl=0,labels=FALSE)  #y-axis: put a 2nd white axis line over the 1st y-axis to make it invisible
        ymin<-min(x[,i]); tmin<-which.min(x[,i]);ymax<-max(x[,i]);tmax<-which.max(x[,i]); # see the code from Jason below for what these do 
        points(x=c(tmin,tmax),y=c(ymin,ymax),pch=19,col=c("red","blue"),cex=1) # add coloured points at max and min
        }
        axis(1,pos=c(-5)) # places horizontal axis at the bottom of it all. 

Вот полученное изображение, которое в основном является решением моей проблемы. Знаки оси Y стараются быть элегантными, показывая только значения MAX и MIN данных и не имея вертикальной линии. Еще раз спасибо @geek-on-acid за совет, как мне получить одну ось X в нижней части их всех.

enter image description here

Наконец, для полноты я включаю какой -то код для Sparklines ближе к Стиль Тафте Джейсон Дитерле, который я нашел на Форум Тафте. Анкет Они выглядят намного приятнее, чем мои, но код делает только один сюжет за раз. Вот оригинальный пост:

#Here is a simple R implementation of sparklines. Running sparkline() will generate a random sparkline; running sparkline(yourdata) will generate a sparkline using the data in yourdata. As an example, here is Google's stock price for the last year.

#R sparklines
sparkline<-function(ydata=rnorm(100,500,50),width=1.5,height=0.5,sigfigs=4) {

# ydata = vector of data to be plotted
# width = width of sparlkline in inches, including text
# height = height of sparkline in inches
# sigfigs = number of significant figures to round min, max, and last values to

    temppar<-par(no.readonly = TRUE) # store default graphics parameters
    par(mai=c(0.10,0.05,0.10,0.05),fin=c(width,height)) # adjust graphics parameters for sparklines
    len<-length(ydata) # determine the length of the data set
    ymin<-min(ydata) # determine the minimum
    tmin<-which.min(ydata) # and its index
    ymax<-max(ydata) # determine the maximum
    tmax<-which.max(ydata) # and its index
    yfin<-signif(ydata[len],sigfigs) #determine most recent data point
    plotrange=c(ymin-0.3*(ymax-ymin),ymax+0.3*(ymax-ymin)) # define plot range to leave enough room for min and max circles and text
    plot(x=1:len,y=ydata,type="l",xlim=c(1,len*1.5),ylim=plotrange,col="gray",lwd=0.5,ann=FALSE,axes=FALSE) # plot sparkline
    points(x=c(tmin,tmax),y=c(ymin,ymax),pch=19,col=c("red","blue"),cex=0.5) # plot min and max points
    text(x=len,y=ymin,labels=signif(ymin,sigfigs),cex=0.5,pos=4,col="red") # show minimum value
    text(x=len,y=ymax,labels=signif(ymax,sigfigs),cex=0.5,pos=4,col="blue") # show maximum value
    text(x=len,y=(ymin+ymax)/2,labels=yfin,cex=0.5,pos=4) # show most recent value
    par(temppar) # restore graphics defaults
}
#-- Jason Dieterle (email), January 28, 2008

И вот как выглядит его результат (немного увеличился):

enter image description here

В дополнение к пакету yaletoolkit, есть Sparktable Package о чем я узнал Stats.stackexchange но не пробовали. У R-Forge есть запись для Еще один пакет Сделать блеск, но этот, похоже, не был активным или полезным.

Это было полезно?

Решение

Что ж, sparklines сильно зависят от grid Пакет, поэтому вам нужно копать глубоко, чтобы найти эти параметры размера шрифта. Играть с viewpoint вероятно, доставит вас туда. Для простого (но очень «сырого») решения просто используйте простой параметры построения, используя par - Таким образом, вы можете очень легко манипулировать практически каждым параметром:

 x <- data.frame(V = rnorm(1000), W = rnorm(1000), X = rnorm(1000),
      Y = rnorm(1000), Z = rnorm(10))
 par(mfrow=c(5,1),mar=c(1,0,0,0),oma=c(4,5,4,4))
 plot(x$V,axes=F,ylab="",xlab="",main="",type="l");axis(2,cex.axis=0.7)
 plot(x$W,axes=F,ylab="",xlab="",main="",type="l");axis(2,cex.axis=0.7)
 plot(x$X,axes=F,ylab="",xlab="",main="",type="l");axis(2,cex.axis=0.7)
 plot(x$Y,axes=F,ylab="",xlab="",main="",type="l");axis(2,cex.axis=0.7)
 plot(x$Z,axes=F,ylab="",xlab="",main="",type="l");axis(2,cex.axis=0.7)
 axis(1,pos=c(-2))

enter image description here

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top