facet_zoom can't change breaks of zoomed plot












1















I currently have a plot and have used facet_zoom to focus on records between 0 and 10 in the x axis. The following code reproduces an example:



require(ggplot2)
require(ggforce)
require(dplyr)
x <- rnorm(10000, 50, 25)
y <- rexp(10000)
data <- data.frame(x, y)

ggplot(data, aes(x = x, y = y)) +
geom_point() +
facet_zoom(x = dplyr::between(x, 0, 10))


I want to change the breaks on the zoomed portion of the graph to be the equivalent of:



ggplot(data, aes(x = x, y = y)) +
geom_point() +
facet_zoom(x = dplyr::between(x, 0, 10)) +
scale_x_continuous(breaks = seq(0,10,2))


But this changes the breaks of the original plot as well. Is it possible to just change the breaks of the zoomed portion whilst leaving the original plot as default?










share|improve this question





























    1















    I currently have a plot and have used facet_zoom to focus on records between 0 and 10 in the x axis. The following code reproduces an example:



    require(ggplot2)
    require(ggforce)
    require(dplyr)
    x <- rnorm(10000, 50, 25)
    y <- rexp(10000)
    data <- data.frame(x, y)

    ggplot(data, aes(x = x, y = y)) +
    geom_point() +
    facet_zoom(x = dplyr::between(x, 0, 10))


    I want to change the breaks on the zoomed portion of the graph to be the equivalent of:



    ggplot(data, aes(x = x, y = y)) +
    geom_point() +
    facet_zoom(x = dplyr::between(x, 0, 10)) +
    scale_x_continuous(breaks = seq(0,10,2))


    But this changes the breaks of the original plot as well. Is it possible to just change the breaks of the zoomed portion whilst leaving the original plot as default?










    share|improve this question



























      1












      1








      1


      1






      I currently have a plot and have used facet_zoom to focus on records between 0 and 10 in the x axis. The following code reproduces an example:



      require(ggplot2)
      require(ggforce)
      require(dplyr)
      x <- rnorm(10000, 50, 25)
      y <- rexp(10000)
      data <- data.frame(x, y)

      ggplot(data, aes(x = x, y = y)) +
      geom_point() +
      facet_zoom(x = dplyr::between(x, 0, 10))


      I want to change the breaks on the zoomed portion of the graph to be the equivalent of:



      ggplot(data, aes(x = x, y = y)) +
      geom_point() +
      facet_zoom(x = dplyr::between(x, 0, 10)) +
      scale_x_continuous(breaks = seq(0,10,2))


      But this changes the breaks of the original plot as well. Is it possible to just change the breaks of the zoomed portion whilst leaving the original plot as default?










      share|improve this question
















      I currently have a plot and have used facet_zoom to focus on records between 0 and 10 in the x axis. The following code reproduces an example:



      require(ggplot2)
      require(ggforce)
      require(dplyr)
      x <- rnorm(10000, 50, 25)
      y <- rexp(10000)
      data <- data.frame(x, y)

      ggplot(data, aes(x = x, y = y)) +
      geom_point() +
      facet_zoom(x = dplyr::between(x, 0, 10))


      I want to change the breaks on the zoomed portion of the graph to be the equivalent of:



      ggplot(data, aes(x = x, y = y)) +
      geom_point() +
      facet_zoom(x = dplyr::between(x, 0, 10)) +
      scale_x_continuous(breaks = seq(0,10,2))


      But this changes the breaks of the original plot as well. Is it possible to just change the breaks of the zoomed portion whilst leaving the original plot as default?







      r ggplot2 ggforce






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited 22 hours ago









      Z.Lin

      10.7k21729




      10.7k21729










      asked Nov 19 '18 at 10:42









      Dominic FoyDominic Foy

      162




      162
























          1 Answer
          1






          active

          oldest

          votes


















          0














          This works for your use case:



          ggplot(data, aes(x = x, y = y)) +
          geom_point() +
          facet_zoom(x = between(x, 0, 10)) +
          scale_x_continuous(breaks = pretty)


          plot



          From ?scale_x_continuous, breaks would accept the following (emphasis added):




          One of:





          • NULL for no breaks


          • waiver() for the default breaks computed by the transformation object

          • A numeric vector of positions

          • A function that takes the limits as input and returns breaks as output




          pretty() is one such function. It doesn't offer very fine control, but does allow you to have some leeway to specify breaks across different facets with very different scales.



          For illustration, here are two examples with different desired number of breaks. See ?pretty for more details on the other arguments this function accepts.



          p <- ggplot(data, aes(x = x, y = y)) +
          geom_point() +
          facet_zoom(x = between(x, 0, 10))

          cowplot::plot_grid(
          p + scale_x_continuous(breaks = function(x) pretty(x, n = 3)),
          p + scale_x_continuous(breaks = function(x) pretty(x, n = 10)),
          labels = c("n = 3", "n = 10"),
          nrow = 1
          )


          more examples



          Of course, you can also define your own function to convert plot limits into desired breaks, (e.g. something like p + scale_x_continuous(breaks = function(x) seq(min(x), max(x), length.out = 5))), but I generally find these functions require more tweaking to get right, & pretty() is often good enough.






          share|improve this answer























            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53372868%2ffacet-zoom-cant-change-breaks-of-zoomed-plot%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            0














            This works for your use case:



            ggplot(data, aes(x = x, y = y)) +
            geom_point() +
            facet_zoom(x = between(x, 0, 10)) +
            scale_x_continuous(breaks = pretty)


            plot



            From ?scale_x_continuous, breaks would accept the following (emphasis added):




            One of:





            • NULL for no breaks


            • waiver() for the default breaks computed by the transformation object

            • A numeric vector of positions

            • A function that takes the limits as input and returns breaks as output




            pretty() is one such function. It doesn't offer very fine control, but does allow you to have some leeway to specify breaks across different facets with very different scales.



            For illustration, here are two examples with different desired number of breaks. See ?pretty for more details on the other arguments this function accepts.



            p <- ggplot(data, aes(x = x, y = y)) +
            geom_point() +
            facet_zoom(x = between(x, 0, 10))

            cowplot::plot_grid(
            p + scale_x_continuous(breaks = function(x) pretty(x, n = 3)),
            p + scale_x_continuous(breaks = function(x) pretty(x, n = 10)),
            labels = c("n = 3", "n = 10"),
            nrow = 1
            )


            more examples



            Of course, you can also define your own function to convert plot limits into desired breaks, (e.g. something like p + scale_x_continuous(breaks = function(x) seq(min(x), max(x), length.out = 5))), but I generally find these functions require more tweaking to get right, & pretty() is often good enough.






            share|improve this answer




























              0














              This works for your use case:



              ggplot(data, aes(x = x, y = y)) +
              geom_point() +
              facet_zoom(x = between(x, 0, 10)) +
              scale_x_continuous(breaks = pretty)


              plot



              From ?scale_x_continuous, breaks would accept the following (emphasis added):




              One of:





              • NULL for no breaks


              • waiver() for the default breaks computed by the transformation object

              • A numeric vector of positions

              • A function that takes the limits as input and returns breaks as output




              pretty() is one such function. It doesn't offer very fine control, but does allow you to have some leeway to specify breaks across different facets with very different scales.



              For illustration, here are two examples with different desired number of breaks. See ?pretty for more details on the other arguments this function accepts.



              p <- ggplot(data, aes(x = x, y = y)) +
              geom_point() +
              facet_zoom(x = between(x, 0, 10))

              cowplot::plot_grid(
              p + scale_x_continuous(breaks = function(x) pretty(x, n = 3)),
              p + scale_x_continuous(breaks = function(x) pretty(x, n = 10)),
              labels = c("n = 3", "n = 10"),
              nrow = 1
              )


              more examples



              Of course, you can also define your own function to convert plot limits into desired breaks, (e.g. something like p + scale_x_continuous(breaks = function(x) seq(min(x), max(x), length.out = 5))), but I generally find these functions require more tweaking to get right, & pretty() is often good enough.






              share|improve this answer


























                0












                0








                0







                This works for your use case:



                ggplot(data, aes(x = x, y = y)) +
                geom_point() +
                facet_zoom(x = between(x, 0, 10)) +
                scale_x_continuous(breaks = pretty)


                plot



                From ?scale_x_continuous, breaks would accept the following (emphasis added):




                One of:





                • NULL for no breaks


                • waiver() for the default breaks computed by the transformation object

                • A numeric vector of positions

                • A function that takes the limits as input and returns breaks as output




                pretty() is one such function. It doesn't offer very fine control, but does allow you to have some leeway to specify breaks across different facets with very different scales.



                For illustration, here are two examples with different desired number of breaks. See ?pretty for more details on the other arguments this function accepts.



                p <- ggplot(data, aes(x = x, y = y)) +
                geom_point() +
                facet_zoom(x = between(x, 0, 10))

                cowplot::plot_grid(
                p + scale_x_continuous(breaks = function(x) pretty(x, n = 3)),
                p + scale_x_continuous(breaks = function(x) pretty(x, n = 10)),
                labels = c("n = 3", "n = 10"),
                nrow = 1
                )


                more examples



                Of course, you can also define your own function to convert plot limits into desired breaks, (e.g. something like p + scale_x_continuous(breaks = function(x) seq(min(x), max(x), length.out = 5))), but I generally find these functions require more tweaking to get right, & pretty() is often good enough.






                share|improve this answer













                This works for your use case:



                ggplot(data, aes(x = x, y = y)) +
                geom_point() +
                facet_zoom(x = between(x, 0, 10)) +
                scale_x_continuous(breaks = pretty)


                plot



                From ?scale_x_continuous, breaks would accept the following (emphasis added):




                One of:





                • NULL for no breaks


                • waiver() for the default breaks computed by the transformation object

                • A numeric vector of positions

                • A function that takes the limits as input and returns breaks as output




                pretty() is one such function. It doesn't offer very fine control, but does allow you to have some leeway to specify breaks across different facets with very different scales.



                For illustration, here are two examples with different desired number of breaks. See ?pretty for more details on the other arguments this function accepts.



                p <- ggplot(data, aes(x = x, y = y)) +
                geom_point() +
                facet_zoom(x = between(x, 0, 10))

                cowplot::plot_grid(
                p + scale_x_continuous(breaks = function(x) pretty(x, n = 3)),
                p + scale_x_continuous(breaks = function(x) pretty(x, n = 10)),
                labels = c("n = 3", "n = 10"),
                nrow = 1
                )


                more examples



                Of course, you can also define your own function to convert plot limits into desired breaks, (e.g. something like p + scale_x_continuous(breaks = function(x) seq(min(x), max(x), length.out = 5))), but I generally find these functions require more tweaking to get right, & pretty() is often good enough.







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered 22 hours ago









                Z.LinZ.Lin

                10.7k21729




                10.7k21729






























                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53372868%2ffacet-zoom-cant-change-breaks-of-zoomed-plot%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    Biblatex bibliography style without URLs when DOI exists (in Overleaf with Zotero bibliography)

                    ComboBox Display Member on multiple fields

                    Is it possible to collect Nectar points via Trainline?