Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

ggplot2 grab bag.

License

NotificationsYou must be signed in to change notification settings

shabbychef/ggallin

Repository files navigation

Build StatusCRANDownloadsTotal

If you think I'm into this for the money you're dead wrong because I'm not doing this for the money. I'm doing it because it lives inside of me. -- GG Allin

A grab bag ofggplot2 extensions and hacks.

-- Steven E. Pav,shabbychef@gmail.com

Installation

This package can be installedfrom CRAN (not yet),viadrat, orfrom github:

# via CRAN: (not yet)# install.packages("ggallin")# via drat:if (require(drat)) {drat:::add("shabbychef")    install.packages("ggallin")}# get snapshot from github (may be buggy)if (require(devtools)) {  install_github('shabbychef/ggallin')}

geom_cloud

Thisgeom acts nearly as a drop-in replacement forgeom_errorbar,convertingymin andymax into 'clouds' of uncertainty with alphaproportional to normal density.

library(ggplot2)library(ggallin)library(dplyr)nobs<-1000set.seed(2134)mydat<-data.frame(grp=sample(c(0,1),nobs,replace=TRUE),colfac=sample(letters[1:2],nobs,replace=TRUE),rowfac=sample(letters[10+ (1:3)],nobs,replace=TRUE)) %>%  mutate(x=seq(0,1,length.out=nobs)+0.33*grp) %>%  mutate(y=0.25*rnorm(nobs)+2*grp) %>%  mutate(grp=factor(grp)) %>%  mutate(se=sqrt(x)) %>%  mutate(ymin=y-se,ymax=y+se)offs<-2ph<-mydat %>%  mutate(y=y+offs,ymin=ymin+offs,ymax=ymax+offs) %>%  ggplot(aes(x=x,y=y,ymin=ymin,ymax=ymax,color=grp,fill=grp))+   facet_grid(rowfac~colfac)+  scale_y_sqrt()+ geom_line()+   geom_cloud(aes(fill=grp),steps=15,max_alpha=0.85,color=NA)+     labs(title='geom cloud')print(ph)

plot of chunk geomcloud

log-like transforms

The square root transform is a good compromise between raw and logarithmicscales, showing detail across different scales without over-emphasizing verysmall variation. However, it does not work for negative numbers. Thusa signed square root transform is useful. Along similar lines, thepseudo-log transformaccepts negative numbers while providing a good view across magnitudes.Some illustrations:

library(ggplot2)library(ggallin)library(dplyr)nobs<-100# this is a silly example, don't blame meset.seed(1234)mydat<-data.frame(x=rnorm(nobs),z=rnorm(nobs)) %>%  mutate(y=sign(z)* exp(x+z-2))ph<-mydat %>%  ggplot(aes(x=x,y=y))+   geom_line()+   scale_y_continuous(trans=ssqrt_trans)print(ph)

plot of chunk loglike_trans

ph<-mydat %>%  ggplot(aes(x=x,y=y))+   geom_line()+   scale_y_continuous(trans=pseudolog10_trans)print(ph)

plot of chunk loglike_trans

interpolated transforms

Scale transforms are useful for 'straightening out' crooked data graphically.Sometimes these transforms can not be expressed functionally but instead relyon data. In this case we can imagine that we have some paired data thatprovide the transformationx -> y. We provide a scale transformation thatsupports linear interpolation.We also provide another scale transformation that acceptsx and positive 'weights'w, and computesy by taking the cumulative sum of weights, called a 'warp'transformation.

Here we illustrate the warp transformation by plotting the cumulative return ofthe 'UMD' factor against a time scale that is uniform in cumulative daily VIX(whatever that means):

library(ggplot2)library(ggallin)library(dplyr)library(aqfb.data)library(scales)data(dvix)data(dff4)rr_to_nav<-function(x) {  exp(cumsum(log(1+x)))}rets<-dff4 %>%  as.data.frame() %>%tibble::rownames_to_column(var='date') %>%  inner_join(dvix %>%             as.data.frame() %>%             setNames(c('VIX')) %>%tibble::rownames_to_column(var='date'),by='date') %>%  mutate(date=as.Date(date,format='%Y-%m-%d')) %>%  mutate(UMD_nav=rr_to_nav(0.01*UMD),SMB_nav=rr_to_nav(0.01*SMB),HML_nav=rr_to_nav(0.01*HML))ph<-rets %>%    ggplot(aes(x=date,y=UMD_nav))+    geom_line()+    labs(y='UMD cumulative return')+     labs(x='regular date scale')  print(ph)

plot of chunk interp_trans

# select breaks automagicallyph<-rets %>%    ggplot(aes(x=date,y=UMD_nav))+    geom_line()+     scale_x_continuous(trans=warp_trans(x=rets$date,w=rets$VIX))+    labs(y='UMD cumulative return')+     labs(x='warped date scale')  print(ph)

plot of chunk interp_trans

# force decade breaks:ph<-rets %>%    ggplot(aes(x=date,y=UMD_nav))+    geom_line()+     scale_x_continuous(trans=warp_trans(x=rets$date,w=rets$VIX,breaks=scales::date_breaks('10 years'),format=scales::date_format('%Y')))+labs(y='UMD cumulative return')+ labs(x='warped date scale')print(ph)

plot of chunk interp_trans

# reverse scale as well (see composition of transforms)ph<-rets %>%  ggplot(aes(x=date,y=UMD_nav))+  geom_line()+   scale_x_continuous(trans=scales::reverse_trans() %of% warp_trans(x=rets$date,w=rets$VIX))+  labs(y='UMD cumulative return')+   labs(x='reversed, warped date scale')print(ph)

plot of chunk interp_trans

composition of transforms

The%of% binary operator supports composition of scale transformations. Thisis most useful for composing reverse scales with other transforms:

library(ggplot2)library(ggallin)#  reverse and log scaleset.seed(1234)ph<- ggplot(data.frame(x=rnorm(100),y=exp(rnorm(100,mean=-2,sd=4))),aes(x=x,y=y))+   geom_point()+   scale_y_continuous(trans=scales::reverse_trans() %of%scales::log10_trans())+  labs(title='reversed and log scaled y')print(ph)

plot of chunk compose_trans

About

ggplot2 grab bag.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

[8]ページ先頭

©2009-2025 Movatter.jp