-
Notifications
You must be signed in to change notification settings - Fork 2.1k
Add alt-text functionality #4482
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
Conversation
library(ggplot2)
p <- ggplot(mpg, aes(displ, hwy)) +
geom_point()
get_alt_text(p)
#> [1] "A plot showing displ on the x-axis and hwy on the y-axis using a point layer"
p <- p + ggtitle("The relationship between displacement and yield in cars")
get_alt_text(p)
#> [1] "The relationship between displacement and yield in cars. A plot showing displ on the x-axis and hwy on the y-axis using a point layer"
# It will use scale information if available
p <- p + scale_x_continuous("highway miles per gallon")
get_alt_text(p)
#> [1] "The relationship between displacement and yield in cars. A plot showing highway miles per gallon on a continuous x-axis and hwy on the y-axis using a point layer"
# Add a short description of the main conclusion of the plot
p <- p + labs(alt_insight = "The higher the yield, the lower the displacement")
get_alt_text(p)
#> [1] "The relationship between displacement and yield in cars. A plot showing highway miles per gallon on a continuous x-axis and hwy on the y-axis using a point layer. The higher the yield, the lower the displacement"
# A user provided alt text takes precedence
p <- p + labs(
alt = paste("A scatterplot showing the negative correlation between engine",
"displacement as a function of highway miles per gallon")
)
get_alt_text(p)
#> [1] "A scatterplot showing the negative correlation between engine displacement as a function of highway miles per gallon" Created on 2021-05-20 by the reprex package (v2.0.0) |
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 think this is probably worth a short bullet, mentioning the new labels and that we're working on tooling to automatically expose in Rmd.
R/labels.r
Outdated
UseMethod("get_alt_text") | ||
} | ||
#' @export | ||
get_alt_text.ggplot <- function(p, ...) { |
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.
Could we also get a method for the ggplot_build
class? This would make the implementation for shiny::renderPlot()
slightly easier (and more efficient), and might be useful in other situations
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.
Better yet, would it be sensible for ggplot_build()
to call this function and tack it onto the result?
…and allow retrival from both ggplot_built and gtable object
Co-authored-by: Hadley Wickham <h.wickham@gmail.com>
/document |
Sorry for asking here, but as an actual screen reader user myself, I was wondering if there would be any way for me to use alt argument in conjunction with library(ggplot2)
library(BrailleR)
#> The BrailleR.View, option is set to FALSE.
#>
#> Attaching package: 'BrailleR'
#> The following objects are masked from 'package:graphics':
#>
#> boxplot, hist
#> The following object is masked from 'package:utils':
#>
#> history
#> The following objects are masked from 'package:base':
#>
#> grep, gsub
ggplot(mpg, aes(class)) +
geom_bar() +
labs(alt = VI(.))
#> Error in VI(.): object '.' not found Created on 2022-03-31 by the reprex package (v2.0.1) Session infosessioninfo::session_info()
#> - Session info ---------------------------------------------------------------
#> setting value
#> version R version 4.1.3 (2022-03-10)
#> os Windows 10 x64 (build 19044)
#> system x86_64, mingw32
#> ui RTerm
#> language (EN)
#> collate English_United States.1252
#> ctype English_United States.1252
#> tz America/Chicago
#> date 2022-03-31
#> pandoc 2.17.1.1 @ C:/PROGRA~3/CHOCOL~1/bin/ (via rmarkdown)
#>
#> - Packages -------------------------------------------------------------------
#> package * version date (UTC) lib source
#> assertthat 0.2.1 2019-03-21 [1] CRAN (R 4.1.2)
#> BrailleR * 0.33.1 2022-03-31 [1] Github (ajrgodfrey/BrailleR@393fd70)
#> brio 1.1.3 2021-11-30 [1] CRAN (R 4.1.2)
#> cachem 1.0.6 2021-08-19 [1] CRAN (R 4.1.2)
#> callr 3.7.0 2021-04-20 [1] CRAN (R 4.1.2)
#> cli 3.2.0 2022-02-14 [1] CRAN (R 4.1.2)
#> colorspace 2.0-3 2022-02-21 [1] CRAN (R 4.1.2)
#> crayon 1.5.1 2022-03-26 [1] CRAN (R 4.1.3)
#> DBI 1.1.2 2021-12-20 [1] CRAN (R 4.1.2)
#> desc 1.4.1 2022-03-06 [1] CRAN (R 4.1.2)
#> devtools 2.4.3 2021-11-30 [1] CRAN (R 4.1.2)
#> digest 0.6.29 2021-12-01 [1] CRAN (R 4.1.2)
#> dplyr 1.0.8 2022-02-08 [1] CRAN (R 4.1.2)
#> ellipsis 0.3.2 2021-04-29 [1] CRAN (R 4.1.2)
#> evaluate 0.15 2022-02-18 [1] CRAN (R 4.1.2)
#> extrafont 0.17 2014-12-08 [1] CRAN (R 4.1.2)
#> extrafontdb 1.0 2012-06-11 [1] CRAN (R 4.1.1)
#> fansi 1.0.3 2022-03-24 [1] CRAN (R 4.1.3)
#> fastmap 1.1.0 2021-01-25 [1] CRAN (R 4.1.2)
#> fs 1.5.2 2021-12-08 [1] CRAN (R 4.1.2)
#> generics 0.1.2 2022-01-31 [1] CRAN (R 4.1.2)
#> ggplot2 * 3.3.5 2021-06-25 [1] CRAN (R 4.1.2)
#> glue 1.6.2 2022-02-24 [1] CRAN (R 4.1.2)
#> gridGraphics 0.5-1 2020-12-13 [1] CRAN (R 4.1.2)
#> gridSVG 1.7-4 2022-03-01 [1] CRAN (R 4.1.2)
#> gtable 0.3.0 2019-03-25 [1] CRAN (R 4.1.2)
#> highr 0.9 2021-04-16 [1] CRAN (R 4.1.2)
#> htmltools 0.5.2 2021-08-25 [1] CRAN (R 4.1.2)
#> hunspell 3.0.1 2020-12-09 [1] CRAN (R 4.1.2)
#> jsonlite 1.8.0 2022-02-22 [1] CRAN (R 4.1.2)
#> knitr 1.38 2022-03-25 [1] CRAN (R 4.1.3)
#> lifecycle 1.0.1 2021-09-24 [1] CRAN (R 4.1.2)
#> magrittr 2.0.2 2022-01-26 [1] CRAN (R 4.1.2)
#> memoise 2.0.1 2021-11-26 [1] CRAN (R 4.1.2)
#> moments 0.14 2015-01-05 [1] CRAN (R 4.1.1)
#> munsell 0.5.0 2018-06-12 [1] CRAN (R 4.1.2)
#> pillar 1.7.0 2022-02-01 [1] CRAN (R 4.1.2)
#> pkgbuild 1.3.1 2021-12-20 [1] CRAN (R 4.1.2)
#> pkgconfig 2.0.3 2019-09-22 [1] CRAN (R 4.1.2)
#> pkgload 1.2.4 2021-11-30 [1] CRAN (R 4.1.2)
#> prettyunits 1.1.1 2020-01-24 [1] CRAN (R 4.1.2)
#> processx 3.5.3 2022-03-25 [1] CRAN (R 4.1.3)
#> ps 1.6.0 2021-02-28 [1] CRAN (R 4.1.2)
#> purrr 0.3.4 2020-04-17 [1] CRAN (R 4.1.2)
#> R.cache 0.15.0 2021-04-30 [1] CRAN (R 4.1.2)
#> R.methodsS3 1.8.1 2020-08-26 [1] CRAN (R 4.1.1)
#> R.oo 1.24.0 2020-08-26 [1] CRAN (R 4.1.1)
#> R.utils 2.11.0 2021-09-26 [1] CRAN (R 4.1.2)
#> R6 2.5.1 2021-08-19 [1] CRAN (R 4.1.2)
#> rbibutils 2.2.7 2021-12-07 [1] CRAN (R 4.1.2)
#> Rcpp 1.0.8.3 2022-03-17 [1] CRAN (R 4.1.3)
#> Rdpack 2.3 2022-03-23 [1] CRAN (R 4.1.3)
#> remotes 2.4.2 2021-11-30 [1] CRAN (R 4.1.2)
#> reprex 2.0.1 2021-08-05 [1] CRAN (R 4.1.2)
#> rlang 1.0.2 2022-03-04 [1] CRAN (R 4.1.2)
#> rmarkdown 2.13 2022-03-10 [1] CRAN (R 4.1.3)
#> roloc 0.1-1 2018-07-30 [1] CRAN (R 4.1.2)
#> rolocISCCNBS 0.1 2018-08-02 [1] CRAN (R 4.1.2)
#> rprojroot 2.0.2 2020-11-15 [1] CRAN (R 4.1.2)
#> Rttf2pt1 1.3.10 2022-02-07 [1] CRAN (R 4.1.2)
#> scales 1.1.1 2020-05-11 [1] CRAN (R 4.1.2)
#> sessioninfo 1.2.2 2021-12-06 [1] CRAN (R 4.1.2)
#> stringi 1.7.6 2021-11-29 [1] CRAN (R 4.1.2)
#> stringr 1.4.0 2019-02-10 [1] CRAN (R 4.1.2)
#> styler 1.7.0 2022-03-13 [1] CRAN (R 4.1.3)
#> testthat 3.1.3 2022-03-29 [1] CRAN (R 4.1.3)
#> tibble 3.1.6 2021-11-07 [1] CRAN (R 4.1.2)
#> tidyselect 1.1.2 2022-02-21 [1] CRAN (R 4.1.2)
#> usethis 2.1.5 2021-12-09 [1] CRAN (R 4.1.2)
#> utf8 1.2.2 2021-07-24 [1] CRAN (R 4.1.2)
#> vctrs 0.4.0 2022-03-30 [1] CRAN (R 4.1.3)
#> whisker 0.4 2019-08-28 [1] CRAN (R 4.1.2)
#> withr 2.5.0 2022-03-03 [1] CRAN (R 4.1.2)
#> xfun 0.30 2022-03-02 [1] CRAN (R 4.1.2)
#> XML 3.99-0.9 2022-02-24 [1] CRAN (R 4.1.2)
#> xtable 1.8-4 2019-04-21 [1] CRAN (R 4.1.2)
#> yaml 2.3.5 2022-02-21 [1] CRAN (R 4.1.2)
#>
#> [1] C:/Program Files/R/R-4.1.3/library
#>
#> ------------------------------------------------------------------------------ |
@jooyoungseo you mean to have BrailleR generate the alt text? |
@hadley, yeah, I can add the alt text as a post process like below; however, I was wondering if there would be any way I could achieve this in the middle of plotting using dot symbol like {dplyr} piping process (e.g., library(BrailleR)
#> The BrailleR.View, option is set to FALSE.
#>
#> Attaching package: 'BrailleR'
#> The following objects are masked from 'package:graphics':
#>
#> boxplot, hist
#> The following object is masked from 'package:utils':
#>
#> history
#> The following objects are masked from 'package:base':
#>
#> grep, gsub
library(tidyverse)
g <- ggplot(mpg, aes(class)) + geom_bar()
g + labs(alt = VI(g)$text)
Created on 2022-04-01 by the reprex package (v2.0.1) Session infosessioninfo::session_info()
#> - Session info ---------------------------------------------------------------
#> setting value
#> version R version 4.1.3 (2022-03-10)
#> os Windows 10 x64 (build 19044)
#> system x86_64, mingw32
#> ui RTerm
#> language (EN)
#> collate English_United States.1252
#> ctype English_United States.1252
#> tz America/Chicago
#> date 2022-04-01
#> pandoc 2.17.1.1 @ C:/PROGRA~3/CHOCOL~1/bin/ (via rmarkdown)
#>
#> - Packages -------------------------------------------------------------------
#> package * version date (UTC) lib source
#> assertthat 0.2.1 2019-03-21 [1] CRAN (R 4.1.2)
#> backports 1.4.1 2021-12-13 [1] CRAN (R 4.1.2)
#> BrailleR * 0.33.1 2022-03-31 [1] Github (ajrgodfrey/BrailleR@393fd70)
#> brio 1.1.3 2021-11-30 [1] CRAN (R 4.1.2)
#> broom 0.7.12 2022-01-28 [1] CRAN (R 4.1.2)
#> cachem 1.0.6 2021-08-19 [1] CRAN (R 4.1.2)
#> callr 3.7.0 2021-04-20 [1] CRAN (R 4.1.2)
#> cellranger 1.1.0 2016-07-27 [1] CRAN (R 4.1.2)
#> cli 3.2.0 2022-02-14 [1] CRAN (R 4.1.2)
#> colorspace 2.0-3 2022-02-21 [1] CRAN (R 4.1.2)
#> crayon 1.5.1 2022-03-26 [1] CRAN (R 4.1.3)
#> curl 4.3.2 2021-06-23 [1] CRAN (R 4.1.2)
#> DBI 1.1.2 2021-12-20 [1] CRAN (R 4.1.2)
#> dbplyr 2.1.1 2021-04-06 [1] CRAN (R 4.1.2)
#> desc 1.4.1 2022-03-06 [1] CRAN (R 4.1.2)
#> devtools 2.4.3 2021-11-30 [1] CRAN (R 4.1.2)
#> digest 0.6.29 2021-12-01 [1] CRAN (R 4.1.2)
#> dplyr * 1.0.8 2022-02-08 [1] CRAN (R 4.1.2)
#> ellipsis 0.3.2 2021-04-29 [1] CRAN (R 4.1.2)
#> evaluate 0.15 2022-02-18 [1] CRAN (R 4.1.2)
#> extrafont 0.17 2014-12-08 [1] CRAN (R 4.1.2)
#> extrafontdb 1.0 2012-06-11 [1] CRAN (R 4.1.1)
#> fansi 1.0.3 2022-03-24 [1] CRAN (R 4.1.3)
#> farver 2.1.0 2021-02-28 [1] CRAN (R 4.1.2)
#> fastmap 1.1.0 2021-01-25 [1] CRAN (R 4.1.2)
#> forcats * 0.5.1 2021-01-27 [1] CRAN (R 4.1.2)
#> fs 1.5.2 2021-12-08 [1] CRAN (R 4.1.2)
#> generics 0.1.2 2022-01-31 [1] CRAN (R 4.1.2)
#> ggplot2 * 3.3.5 2021-06-25 [1] CRAN (R 4.1.2)
#> glue 1.6.2 2022-02-24 [1] CRAN (R 4.1.2)
#> gridGraphics 0.5-1 2020-12-13 [1] CRAN (R 4.1.2)
#> gridSVG 1.7-4 2022-03-01 [1] CRAN (R 4.1.2)
#> gtable 0.3.0 2019-03-25 [1] CRAN (R 4.1.2)
#> haven 2.4.3 2021-08-04 [1] CRAN (R 4.1.2)
#> highr 0.9 2021-04-16 [1] CRAN (R 4.1.2)
#> hms 1.1.1 2021-09-26 [1] CRAN (R 4.1.2)
#> htmltools 0.5.2 2021-08-25 [1] CRAN (R 4.1.2)
#> httr 1.4.2 2020-07-20 [1] CRAN (R 4.1.2)
#> hunspell 3.0.1 2020-12-09 [1] CRAN (R 4.1.2)
#> jsonlite 1.8.0 2022-02-22 [1] CRAN (R 4.1.2)
#> knitr 1.38 2022-03-25 [1] CRAN (R 4.1.3)
#> labeling 0.4.2 2020-10-20 [1] CRAN (R 4.1.1)
#> lifecycle 1.0.1 2021-09-24 [1] CRAN (R 4.1.2)
#> lubridate 1.8.0 2021-10-07 [1] CRAN (R 4.1.2)
#> magrittr 2.0.2 2022-01-26 [1] CRAN (R 4.1.2)
#> memoise 2.0.1 2021-11-26 [1] CRAN (R 4.1.2)
#> mime 0.12 2021-09-28 [1] CRAN (R 4.1.1)
#> modelr 0.1.8 2020-05-19 [1] CRAN (R 4.1.2)
#> moments 0.14 2015-01-05 [1] CRAN (R 4.1.1)
#> munsell 0.5.0 2018-06-12 [1] CRAN (R 4.1.2)
#> pillar 1.7.0 2022-02-01 [1] CRAN (R 4.1.2)
#> pkgbuild 1.3.1 2021-12-20 [1] CRAN (R 4.1.2)
#> pkgconfig 2.0.3 2019-09-22 [1] CRAN (R 4.1.2)
#> pkgload 1.2.4 2021-11-30 [1] CRAN (R 4.1.2)
#> prettyunits 1.1.1 2020-01-24 [1] CRAN (R 4.1.2)
#> processx 3.5.3 2022-03-25 [1] CRAN (R 4.1.3)
#> ps 1.6.0 2021-02-28 [1] CRAN (R 4.1.2)
#> purrr * 0.3.4 2020-04-17 [1] CRAN (R 4.1.2)
#> R.cache 0.15.0 2021-04-30 [1] CRAN (R 4.1.2)
#> R.methodsS3 1.8.1 2020-08-26 [1] CRAN (R 4.1.1)
#> R.oo 1.24.0 2020-08-26 [1] CRAN (R 4.1.1)
#> R.utils 2.11.0 2021-09-26 [1] CRAN (R 4.1.2)
#> R6 2.5.1 2021-08-19 [1] CRAN (R 4.1.2)
#> rbibutils 2.2.7 2021-12-07 [1] CRAN (R 4.1.2)
#> Rcpp 1.0.8.3 2022-03-17 [1] CRAN (R 4.1.3)
#> Rdpack 2.3 2022-03-23 [1] CRAN (R 4.1.3)
#> readr * 2.1.2 2022-01-30 [1] CRAN (R 4.1.2)
#> readxl 1.4.0 2022-03-28 [1] CRAN (R 4.1.3)
#> remotes 2.4.2 2021-11-30 [1] CRAN (R 4.1.2)
#> reprex 2.0.1 2021-08-05 [1] CRAN (R 4.1.2)
#> rlang 1.0.2 2022-03-04 [1] CRAN (R 4.1.2)
#> rmarkdown 2.13 2022-03-10 [1] CRAN (R 4.1.3)
#> roloc 0.1-1 2018-07-30 [1] CRAN (R 4.1.2)
#> rolocISCCNBS 0.1 2018-08-02 [1] CRAN (R 4.1.2)
#> rprojroot 2.0.2 2020-11-15 [1] CRAN (R 4.1.2)
#> Rttf2pt1 1.3.10 2022-02-07 [1] CRAN (R 4.1.2)
#> rvest 1.0.2 2021-10-16 [1] CRAN (R 4.1.2)
#> scales 1.1.1 2020-05-11 [1] CRAN (R 4.1.2)
#> sessioninfo 1.2.2 2021-12-06 [1] CRAN (R 4.1.2)
#> stringi 1.7.6 2021-11-29 [1] CRAN (R 4.1.2)
#> stringr * 1.4.0 2019-02-10 [1] CRAN (R 4.1.2)
#> styler 1.7.0 2022-03-13 [1] CRAN (R 4.1.3)
#> testthat 3.1.3 2022-03-29 [1] CRAN (R 4.1.3)
#> tibble * 3.1.6 2021-11-07 [1] CRAN (R 4.1.2)
#> tidyr * 1.2.0 2022-02-01 [1] CRAN (R 4.1.2)
#> tidyselect 1.1.2 2022-02-21 [1] CRAN (R 4.1.2)
#> tidyverse * 1.3.1 2021-04-15 [1] CRAN (R 4.1.2)
#> tzdb 0.3.0 2022-03-28 [1] CRAN (R 4.1.3)
#> usethis 2.1.5 2021-12-09 [1] CRAN (R 4.1.2)
#> utf8 1.2.2 2021-07-24 [1] CRAN (R 4.1.2)
#> vctrs 0.4.0 2022-03-30 [1] CRAN (R 4.1.3)
#> whisker 0.4 2019-08-28 [1] CRAN (R 4.1.2)
#> withr 2.5.0 2022-03-03 [1] CRAN (R 4.1.2)
#> xfun 0.30 2022-03-02 [1] CRAN (R 4.1.2)
#> XML 3.99-0.9 2022-02-24 [1] CRAN (R 4.1.2)
#> xml2 1.3.3 2021-11-30 [1] CRAN (R 4.1.2)
#> xtable 1.8-4 2019-04-21 [1] CRAN (R 4.1.2)
#> yaml 2.3.5 2022-02-21 [1] CRAN (R 4.1.2)
#>
#> [1] C:/Program Files/R/R-4.1.3/library
#>
#> ------------------------------------------------------------------------------ |
Would you mind filing an issue for this? We might be able to make the |
Fix #4477
As discussed, this provides a
get_alt_text()
function that will either pull a string fromlabels$alt
or synthesise a description based on the content of the plot.@hadley LMK if you don't have time to look at this before the release