-
Notifications
You must be signed in to change notification settings - Fork 23
added tinyplot.data.frame method #613
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 2 commits
9149657
b7c5b54
145c645
f4fb598
3b0cc13
13cf438
e872bb8
f59bfa5
d3bdef4
1be7573
7f70e27
f6cf880
87dd0d8
15f3b8e
0709aac
16fe06e
fd25752
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,58 @@ | ||
| #' tinyplot Method for Plotting Data Frames | ||
| #' | ||
| #' @description Convenience interface for visualizing data.frame objects | ||
| #' with tinyplot. | ||
| #' | ||
| #' @details This is a convenience function for plotting data frames with | ||
| #' or without a formula. The case with the formula mainly facilitates | ||
| #' using `tinyplot()` in combination with pipes. The case without | ||
| #' formula provides a quick way of plotting the variables in data frames, | ||
| #' either only one variable or a pair of variables. In the future, the | ||
| #' latter might be extended to a pairs display for data frames with | ||
| #' more than two variables but this is not implemented, yet. See the | ||
| #' examples for illustrations. | ||
| #' | ||
| #' @param x an object of class `"data.frame"`. | ||
| #' @param formula a \code{\link[stats]{formula}} that is passed on to | ||
| #' \code{\link{tinyplot.formula}}. If `formula` is `NULL` a formula of | ||
| #' type `y ~ 1` or `y ~ x` is set up for 1- and 2-dimensional data frames, | ||
| #' respectively. For data frames with more than 2 variables the `facet = NULL` | ||
| #' case is not supported, yet, and currently leads to an error. | ||
| #' @param ... further arguments passed to `tinyplot`. | ||
| #' | ||
| #' @examples | ||
| #' tinytheme("clean2") | ||
| #' | ||
| #' ## using tinyplot() with data frames and pipes | ||
| #' cars |> tinyplot() | ||
| #' iris |> tinyplot(Sepal.Length ~ Petal.Width | Species) | ||
|
zeileis marked this conversation as resolved.
Outdated
|
||
| #' | ||
| #' ## tinyplot(df) only works for data frames with 1 or 2 variables | ||
| #' ## in the future we might add a pairs-style display as follows | ||
| #' ## but this would require better handling of axes and their labels | ||
| #' par(mfrow = c(5, 5)) | ||
| #' for (i in names(iris)) for(j in names(iris)) tinyplot(iris[, unique(c(j, i)), drop = FALSE]) | ||
|
zeileis marked this conversation as resolved.
Outdated
|
||
| #' | ||
| #' tinytheme() ## reset | ||
|
zeileis marked this conversation as resolved.
Outdated
|
||
| #' | ||
| #' @export | ||
| tinyplot.data.frame = function (x, formula = NULL, ...) { | ||
| ## original call | ||
| cl = match.call() | ||
|
|
||
| ## default formula | ||
| ## 1d: y ~ 1 | ||
| ## 2d: y ~ x | ||
| ## 3d: pairs? (not supported, yet) | ||
| if (is.null(formula)) { | ||
| if (ncol(x) > 2L) stop("'formula' is missing with no default for more than 2 columns") | ||
|
Owner
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Hmmm, I think we could do better than erroring out here. My own preference is that we either:
P.S. I don't think we should try to mimic base P.P.S. If we go with option 2 or 3, one other thing to consider is whether we support an (atomic)
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. You are right. I think we should just go for 3 and explain the limitations in the manual page.
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I have attempted to implement 3 now including some very simple setting of |
||
| f = names(x) | ||
| if (length(f) < 2L) f = c("1", f) | ||
| cl$formula = as.formula(paste(f[2L:1L], collapse = " ~ ")) | ||
| } | ||
|
|
||
| ## evaluate updated call | ||
| names(cl)[names(cl) == "x"] = "data" | ||
| cl[[1L]] = quote(tinyplot::tinyplot) | ||
| eval.parent(cl) | ||
| } | ||
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
See my comment about the n>2 case below.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I have updated it a little bit now. But depending on where we go with the pairs-esque display, further updates will probably be necessary.