From 20f65a7126ca9a77b649baa1853c6c85a5626241 Mon Sep 17 00:00:00 2001 From: Jared Knowles Date: Mon, 6 Jul 2020 11:48:10 -0400 Subject: [PATCH] install logo correctly --- DESCRIPTION | 16 ++- NAMESPACE | 10 ++ R/db.R | 122 ++++++++++++++++++ R/logo.R | 79 +++++++----- R/theme.R | 21 ++- R/utils.R | 21 +-- civilytics.Rproj | 1 + inst/img/Civilytics Consulting Logo_small.jpg | Bin 50782 -> 0 bytes ...onsulting Logo.jpg => civilytics_logo.jpg} | Bin ...onsulting Logo.pdf => civilytics_logo.pdf} | 0 ...onsulting Logo.png => civilytics_logo.png} | Bin man/add_logo.Rd | 10 +- man/add_logo_ga.Rd | 25 +++- man/countCleanr.Rd | 17 +++ man/countDots.Rd | 17 +++ man/countNA.Rd | 21 +++ man/dbSafeNames.Rd | 17 +++ man/findDots.Rd | 17 +++ man/get_png.Rd | 9 +- man/has_caption.Rd | 12 +- man/hello.Rd | 12 -- man/make_logo_grob.Rd | 7 +- man/measure_caption.Rd | 13 +- man/nvals.Rd | 21 +++ man/plot_jpeg.Rd | 16 ++- man/pretty_per.Rd | 5 +- man/safe_max.Rd | 2 +- man/simpleCap.Rd | 21 +++ man/theme_civilytics.Rd | 18 ++- tests/testthat/test_db.R | 82 ++++++++++++ tests/testthat/test_theme.R | 12 ++ tests/testthat/test_utils.R | 53 ++++++++ 32 files changed, 582 insertions(+), 95 deletions(-) create mode 100644 R/db.R delete mode 100644 inst/img/Civilytics Consulting Logo_small.jpg rename inst/img/{Civilytics Consulting Logo.jpg => civilytics_logo.jpg} (100%) rename inst/img/{Civilytics Consulting Logo.pdf => civilytics_logo.pdf} (100%) rename inst/img/{Civilytics Consulting Logo.png => civilytics_logo.png} (100%) create mode 100644 man/countCleanr.Rd create mode 100644 man/countDots.Rd create mode 100644 man/countNA.Rd create mode 100644 man/dbSafeNames.Rd create mode 100644 man/findDots.Rd delete mode 100644 man/hello.Rd create mode 100644 man/nvals.Rd create mode 100644 man/simpleCap.Rd create mode 100644 tests/testthat/test_db.R create mode 100644 tests/testthat/test_theme.R create mode 100644 tests/testthat/test_utils.R diff --git a/DESCRIPTION b/DESCRIPTION index 7936760..313e21e 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -4,11 +4,21 @@ Title: Utilities Functions for Civilytics Version: 0.1.0 Author: Jared E. Knowles Maintainer: Jared E. Knowles -Description: More about what it does (maybe more than one line) - Use four spaces when indenting paragraphs within the Description. +Description: House R functions for Civilytics Consulting LLC + This package implements a variety of useful functions for creating and + branding analyses produced by Civilytics Consulting LLC. License: LICENSE +Depends: + R (>= 2.15.1) +Imports: + ggplot2, + jpeg, + png, + stringr, + gridExtra, + grid Encoding: UTF-8 LazyData: true Suggests: testthat -RoxygenNote: 7.0.2 +RoxygenNote: 7.1.0 diff --git a/NAMESPACE b/NAMESPACE index be2f84e..9a581ce 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -2,18 +2,28 @@ export(add_logo) export(add_logo_ga) +export(countCleanr) +export(countDots) +export(countNA) +export(dbSafeNames) +export(findDots) export(get_png) export(has_caption) export(make_logo_grob) export(measure_caption) export(na_zero) +export(nvals) export(plot_jpeg) export(pretty_count) export(pretty_per) export(safe_max) +export(simpleCap) export(theme_civilytics) +import(ggplot2) importFrom(ggplot2,theme) +importFrom(graphics,plot) importFrom(graphics,rasterImage) +importFrom(grid,grid.draw) importFrom(grid,rasterGrob) importFrom(gridExtra,arrangeGrob) importFrom(jpeg,readJPEG) diff --git a/R/db.R b/R/db.R new file mode 100644 index 0000000..4f107e6 --- /dev/null +++ b/R/db.R @@ -0,0 +1,122 @@ +# Functions for connecting to Civilytics' data sources + + + +# postgresCon <- function(myip){ +# require("RPostgreSQL") +# require("pool") +# drv <- dbDriver("PostgreSQL") +# con <- dbPool(drv, dbname = "crime", host = myip, +# port = 5432, user="admin", password = "betterplacemakeworld") +# return(con) +# } + + +#' Clean unreported data counts in UCR data +#' +#' @param x a column of data, if character, substitute and conver to numeric +#' +#' @return a numeric column of data +#' @export +countCleanr <- function(x){ + if(class(x) == "character"){ + x[x == "None not reported"] <- "0" + x[x == "Not applicable"] <- NA + x <- as.numeric(x) + return(x) + } else{ + return(x) + } +} + + + +#' Find columns in a dataframe that have values with a "." +#' +#' @param data a dataframe +#' +#' @return the names of columns in the dataframe with one or more entries equal to "." +#' @export +#' +#' @examples +findDots <- function(data){ + return(names(data)[lapply(data, countDots) > 0]) + +} + +#' Count the number of single period entries in a vector +#' +#' @param x a character vector +#' +#' @return +#' @export +#' +#' @examples +countDots <- function(x){ + len <- length(x[x == "." & !is.na(x)]) + totlen <- length(x) + return(len) +} + + +#' Make names safe for inclusion in a database +#' +#' @param names a character vector of possible column or table names +#' +#' @return a vector the same length as the input vector with clean names +#' @export +#' +#' @examples +dbSafeNames <- function(names) { + names = gsub('[^a-z0-9]+','_',tolower(names)) + names = make.names(names, unique = TRUE, allow_ = TRUE) + names = gsub('.','_',names, fixed = TRUE) + names +} + +#' Count number of missing values in a vector +#' +#' @param x a vector of values +#' +#' @return an integer equal to the number of NA entries in the vector +#' @export +#' +#' @examples +#' countNA(letters) # = 0 +#' countNA(c(letters, NA)) # = 1 +countNA <- function(x){ + length(x[is.na(x)]) +} + + +#' Count the number of unique values in a vector +#' +#' @param x a vector of values +#' +#' @return an integer equal to the number of unique values in a vector +#' @export +#' +#' @examples +#' nvals(letters) # = 26 +#' nvals(state.abb) # = 50 +nvals <- function(x){ + length(unique(x)) +} + + +#' Capitalize a character string after each space +#' +#' @param x a character string +#' +#' @return a vector of characters with all values after a space capitalized +#' @export +#' +#' @examples +#' my_string <- c("Happy school", "Easy school", "cool School", "big school") +#' simpleCap(my_string) +simpleCap <- function(x) { + stopifnot(class(x) == "character") + s <- strsplit(x, " ")[[1]] + paste(toupper(substring(s, 1,1)), substring(s, 2), + sep = "", collapse = " ") +} diff --git a/R/logo.R b/R/logo.R index a3dc900..fecd0a4 100644 --- a/R/logo.R +++ b/R/logo.R @@ -1,19 +1,19 @@ -#' Title +#' Plot a jpeg image as a raster #' -#' @param path -#' @param add -#' @param upscale -#' -#' @return +#' @param path a character representing the relative or absolute path to the image +#' @param add a logical, TRUE to add the image to an existing plot, FALSE creates a new plot +#' @param upscale a logical, TRUE upscales the resolution of the graphic by a factor of 3, FALSE +#' preserves the resolution +#' @return a rasterImage #' @export #' @importFrom jpeg readJPEG #' @importFrom graphics rasterImage #' @examples -#' img <- readJPEG(system.file("img","Rlogo.jpg",package="jpeg")) +#' img <- system.file("img","Civilytics Consulting Logo.jpg",package="civilytics") +#' plot_jpeg(img) plot_jpeg <- function(path, add=FALSE, upscale = TRUE) { - require('jpeg') - jpg = readJPEG(path, native=T) # read the file + jpg = readJPEG(path, native = T) # read the file res = dim(jpg)[2:1] # get the resolution, [x, y] if (upscale){ res <- res * 3 @@ -26,9 +26,9 @@ plot_jpeg <- function(path, add=FALSE, upscale = TRUE) } -#' Title +#' Plot a PNG file as a rasterGrob for inclusion in ggplot2 #' -#' @param filename +#' @param filename a character with file path to a png file #' #' @return #' @export @@ -36,16 +36,17 @@ plot_jpeg <- function(path, add=FALSE, upscale = TRUE) #' @importFrom grid rasterGrob #' #' @examples +#' get_png <- function(filename) { grid::rasterGrob(png::readPNG(filename), interpolate = TRUE) } -#' Title +#' Add a logo to a ggplot2 object #' -#' @param plot -#' @param logo -#' @param margin_param +#' @param plot a ggplot2 grob +#' @param logo a logo grob created by make_logo_grob() +#' @param margin_param a numeric specifying what margin to add or subtract to align the logo #' #' @return #' @importFrom ggplot2 theme @@ -73,15 +74,18 @@ add_logo <- function(plot, logo, margin_param = NULL) { padding = unit(0.1, "line")) } -#' Title +#' Measure a ggplot2 object caption #' -#' @param gg +#' @param gg a ggplot object #' -#' @return +#' @return a numeric value stating the number of lines to be added or subtracted to align a logo with +#' the caption #' @importFrom stringr str_count #' @export #' #' @examples +#' p1 <- qplot(mpg, wt, data = mtcars) +#' measure_caption(p1) # Should equal 1 since no caption is required measure_caption <- function(gg) { if (has_caption(gg)) { stringr::str_count(gg$labels$caption, pattern = "\n") + 1 @@ -91,32 +95,43 @@ measure_caption <- function(gg) { } -#' Title +#' Test whether a ggplot2 object has a caption #' -#' @param gg +#' @param gg a gg object from ggplot2 #' -#' @return +#' @return a logical, TRUE if a caption exists and FALSE if it does not +#' @import ggplot2 #' @export #' #' @examples +#' p1 <- ggplot2::qplot(mpg, wt, data = mtcars) +#' has_caption(p1) # FALSE has_caption <- function(gg) { any(names(gg$labels) == "caption") } -#' Title +#' Add a logo to a ggplot2 object #' -#' @param plot_list -#' @param logo -#' @param nrow -#' @param widths -#' @param margin_param +#' @param plot_list a list containing ggplot2 objects +#' @param logo a grob containing the logo created with `make_logo_grob` +#' @param nrow an integer, default = 1, for the number of rows to align the plots in +#' @param widths an optional vector the same length as plot_list with the widths for each plot +#' @param margin_param a number giving the adjustment up or down to help manually align logo and captions #' #' @return +#' @note The resulting object needs to be drawn to the screen using grid.draw() #' @importFrom gridExtra arrangeGrob #' @importFrom ggplot2 theme +#' @importFrom grid grid.draw #' @export #' #' @examples +#' library(ggplot2); library(grid) +#' tmp_plot <- ggplot(mtcars) + aes(x = hp, y = disp) + geom_point() + theme_civilytics() +#' tmp_logo <- make_logo_grob() +#' plot_and_logo <- add_logo(tmp_plot, tmp_logo) +#' grid.draw(plot_and_logo) +#' dev.off() add_logo_ga <- function(plot_list, logo, nrow = 1, widths = NULL, margin_param = NULL) { # Change position of logo depending on if plot has a caption if (!is.null(margin_param)) { @@ -146,14 +161,18 @@ add_logo_ga <- function(plot_list, logo, nrow = 1, widths = NULL, margin_param = #' Get a Civilytics Logo grob #' -#' @return +#' @return a gg object which contains the logo file stored as a Grob suitable for manipulating in +#' grid #' @export -#' +#' @import ggplot2 #' @examples +#' logo <- make_logo_grob() +#' class(logo) # gg make_logo_grob <- function() { logo_grob <- ggplot(mapping = aes(x = 0:1, y = 1)) + theme_void() + annotation_custom(get_png(system.file("img", "civilytics_logo.png", - package="civilytics")), xmin = 0.825, xmax = 1) + package="civilytics")), xmin= 0.7, xmax = 1) logo_grob } + diff --git a/R/theme.R b/R/theme.R index 164678c..a43e332 100644 --- a/R/theme.R +++ b/R/theme.R @@ -1,17 +1,14 @@ - -#' Title +#' Make the Civilytics plot theme #' -#' @param font_size -#' @param font_family -#' @param line_size -#' @param rel_small -#' @param rel_tiny -#' @param rel_large -#' -#' @return +#' @param font_size default 14, a number representing the base font for the theme +#' @param font_family default "", a character for the font family to use in the theme +#' @param line_size default 0.5, the line size to use for the theme +#' @param rel_small default 12/14, the scale factor to create a small font from the base font_size +#' @param rel_tiny default 11/14, the scale factor to create a tiny font from the base font_size +#' @param rel_large default 16/14, the scale factor to create a large font from the base font_size +#' @importFrom graphics plot +#' @return a ggplot2 theme object suitable for combining with ggplot objects to theme them #' @export -#' -#' @examples theme_civilytics <- function (font_size = 14, font_family = "", diff --git a/R/utils.R b/R/utils.R index 6a48874..a73f34f 100644 --- a/R/utils.R +++ b/R/utils.R @@ -8,33 +8,38 @@ #' #' @examples #' safe_max(1:10) -#' safe_max(c(1:10, NA)) # 10 +#' safe_max(c(1:10, NA))# 10 safe_max <- function(x) { - max(x, na.rm = TRUE) + if (all(is.na(x))) { + return(NA) + } else { + max(x, na.rm = TRUE) + } } - - #' Prettify proportion data #' Make data expresed as proportions print out as prettily formatted characters with percentages #' #' @param x a numeric vector of proportions to convert to percentages -#' @param ndigit a vector of length 1 indicating the number of digits to display in the percent +#' @param ndigit a vector of length 1 indicating the number of digits to display in the percent, by +#' default it represents the digits after the decimal point in the percentage form #' -#' @return +#' @return a character vector with a % attached #' @export #' #' @examples #' pretty_per(0.2, ndigit = 1) #' pretty_per(c(0.2, 0.332423, 0.4, 0.342342), ndigit = 2) pretty_per <- function(x, ndigit = 1) { - x <- format(round(x, digits = 3) * 100, nsmall = ndigit) + if (any(x >= 100) & !all(is.na(x))) { + message("Values over 100 found, did you mean to use proportions?") + } + x <- format(round(x, digits = ndigit + 2) * 100, nsmall = ndigit) x <- paste0(x, "%") x[x == "NA%"] <- " - " x <- trimws(x) return(x) } -options(knitr.kable.NA = "-") #' Zero out missing values diff --git a/civilytics.Rproj b/civilytics.Rproj index b9255bc..6daccaa 100644 --- a/civilytics.Rproj +++ b/civilytics.Rproj @@ -18,3 +18,4 @@ StripTrailingWhitespace: Yes BuildType: Package PackageUseDevtools: Yes PackageInstallArgs: --no-multiarch --with-keep.source +PackageRoxygenize: rd,collate,namespace diff --git a/inst/img/Civilytics Consulting Logo_small.jpg b/inst/img/Civilytics Consulting Logo_small.jpg deleted file mode 100644 index c987be4e1d2aa5823c1fc27ed0bdaa792c285c6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50782 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