ggplot custom endpoints of lollipop charts












0















I have the following minimal reproducible example of a lollipop/dumbbell ggplot taken from the rgraph gallery.



How do I make the bullet end points vary depending on a lookup table? The number of lines would be dynamic so it should not hardcode these. So for instance if the lower end is negative it would show a left arrow, if it's zero it should show a bullet and if it's positive it should show a right pointing arrow.



I also wanted to change the color of each line/dumbell depending on these. So for instance if the lower end is ever negative the whole line would be red, if it touches zero the whole line would be blue and it's strictly positive it should show green.



library(tidyverse)

# Create data
value1=abs(rnorm(26))*2
data=data.frame(x=LETTERS[1:26], value1=value1, value2=value1+1+rnorm(26, sd=1) )

# Reorder data using average?
data = data %>% rowwise() %>% mutate( mymean = mean(c(value1,value2) )) %>% arrange(mymean) %>% mutate(x=factor(x, x))

# plot
ggplot(data) +
geom_segment( aes(x=x, xend=x, y=value1, yend=value2), color="grey") +
geom_point( aes(x=x, y=value1), color=rgb(0.2,0.7,0.1,0.5), size=3 ) +
geom_point( aes(x=x, y=value2), color=rgb(0.7,0.2,0.1,0.5), size=3 ) +
coord_flip()

# With a bit more style
ggplot(data) +
geom_segment( aes(x=x, xend=x, y=value1, yend=value2), color="grey") +
geom_point( aes(x=x, y=value1), color=rgb(0.2,0.7,0.1,0.5), size=3 ) +
geom_point( aes(x=x, y=value2), color=rgb(0.7,0.2,0.1,0.5), size=3 ) +
coord_flip()+
theme_light() +
theme(
legend.position = "none",
panel.border = element_blank()
) +
xlab("") +
ylab("Value of Y")









share|improve this question





























    0















    I have the following minimal reproducible example of a lollipop/dumbbell ggplot taken from the rgraph gallery.



    How do I make the bullet end points vary depending on a lookup table? The number of lines would be dynamic so it should not hardcode these. So for instance if the lower end is negative it would show a left arrow, if it's zero it should show a bullet and if it's positive it should show a right pointing arrow.



    I also wanted to change the color of each line/dumbell depending on these. So for instance if the lower end is ever negative the whole line would be red, if it touches zero the whole line would be blue and it's strictly positive it should show green.



    library(tidyverse)

    # Create data
    value1=abs(rnorm(26))*2
    data=data.frame(x=LETTERS[1:26], value1=value1, value2=value1+1+rnorm(26, sd=1) )

    # Reorder data using average?
    data = data %>% rowwise() %>% mutate( mymean = mean(c(value1,value2) )) %>% arrange(mymean) %>% mutate(x=factor(x, x))

    # plot
    ggplot(data) +
    geom_segment( aes(x=x, xend=x, y=value1, yend=value2), color="grey") +
    geom_point( aes(x=x, y=value1), color=rgb(0.2,0.7,0.1,0.5), size=3 ) +
    geom_point( aes(x=x, y=value2), color=rgb(0.7,0.2,0.1,0.5), size=3 ) +
    coord_flip()

    # With a bit more style
    ggplot(data) +
    geom_segment( aes(x=x, xend=x, y=value1, yend=value2), color="grey") +
    geom_point( aes(x=x, y=value1), color=rgb(0.2,0.7,0.1,0.5), size=3 ) +
    geom_point( aes(x=x, y=value2), color=rgb(0.7,0.2,0.1,0.5), size=3 ) +
    coord_flip()+
    theme_light() +
    theme(
    legend.position = "none",
    panel.border = element_blank()
    ) +
    xlab("") +
    ylab("Value of Y")









    share|improve this question



























      0












      0








      0








      I have the following minimal reproducible example of a lollipop/dumbbell ggplot taken from the rgraph gallery.



      How do I make the bullet end points vary depending on a lookup table? The number of lines would be dynamic so it should not hardcode these. So for instance if the lower end is negative it would show a left arrow, if it's zero it should show a bullet and if it's positive it should show a right pointing arrow.



      I also wanted to change the color of each line/dumbell depending on these. So for instance if the lower end is ever negative the whole line would be red, if it touches zero the whole line would be blue and it's strictly positive it should show green.



      library(tidyverse)

      # Create data
      value1=abs(rnorm(26))*2
      data=data.frame(x=LETTERS[1:26], value1=value1, value2=value1+1+rnorm(26, sd=1) )

      # Reorder data using average?
      data = data %>% rowwise() %>% mutate( mymean = mean(c(value1,value2) )) %>% arrange(mymean) %>% mutate(x=factor(x, x))

      # plot
      ggplot(data) +
      geom_segment( aes(x=x, xend=x, y=value1, yend=value2), color="grey") +
      geom_point( aes(x=x, y=value1), color=rgb(0.2,0.7,0.1,0.5), size=3 ) +
      geom_point( aes(x=x, y=value2), color=rgb(0.7,0.2,0.1,0.5), size=3 ) +
      coord_flip()

      # With a bit more style
      ggplot(data) +
      geom_segment( aes(x=x, xend=x, y=value1, yend=value2), color="grey") +
      geom_point( aes(x=x, y=value1), color=rgb(0.2,0.7,0.1,0.5), size=3 ) +
      geom_point( aes(x=x, y=value2), color=rgb(0.7,0.2,0.1,0.5), size=3 ) +
      coord_flip()+
      theme_light() +
      theme(
      legend.position = "none",
      panel.border = element_blank()
      ) +
      xlab("") +
      ylab("Value of Y")









      share|improve this question
















      I have the following minimal reproducible example of a lollipop/dumbbell ggplot taken from the rgraph gallery.



      How do I make the bullet end points vary depending on a lookup table? The number of lines would be dynamic so it should not hardcode these. So for instance if the lower end is negative it would show a left arrow, if it's zero it should show a bullet and if it's positive it should show a right pointing arrow.



      I also wanted to change the color of each line/dumbell depending on these. So for instance if the lower end is ever negative the whole line would be red, if it touches zero the whole line would be blue and it's strictly positive it should show green.



      library(tidyverse)

      # Create data
      value1=abs(rnorm(26))*2
      data=data.frame(x=LETTERS[1:26], value1=value1, value2=value1+1+rnorm(26, sd=1) )

      # Reorder data using average?
      data = data %>% rowwise() %>% mutate( mymean = mean(c(value1,value2) )) %>% arrange(mymean) %>% mutate(x=factor(x, x))

      # plot
      ggplot(data) +
      geom_segment( aes(x=x, xend=x, y=value1, yend=value2), color="grey") +
      geom_point( aes(x=x, y=value1), color=rgb(0.2,0.7,0.1,0.5), size=3 ) +
      geom_point( aes(x=x, y=value2), color=rgb(0.7,0.2,0.1,0.5), size=3 ) +
      coord_flip()

      # With a bit more style
      ggplot(data) +
      geom_segment( aes(x=x, xend=x, y=value1, yend=value2), color="grey") +
      geom_point( aes(x=x, y=value1), color=rgb(0.2,0.7,0.1,0.5), size=3 ) +
      geom_point( aes(x=x, y=value2), color=rgb(0.7,0.2,0.1,0.5), size=3 ) +
      coord_flip()+
      theme_light() +
      theme(
      legend.position = "none",
      panel.border = element_blank()
      ) +
      xlab("") +
      ylab("Value of Y")






      r ggplot2






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 14 '18 at 10:15









      jogo

      9,98192135




      9,98192135










      asked Nov 14 '18 at 10:02









      J. Doe.J. Doe.

      19812




      19812
























          1 Answer
          1






          active

          oldest

          votes


















          0














          This is one way but you'll have to build the legend (if any) manually. I am concerned that you are masking which of value1 or value2 is on the left by the way you want to set the color (IMO the color should always be associated with the measure name but you are the one who wants to do it this way). It uses plain text shapes for the left bullet since you'd have to do some interesting "arrow()"-ing or use custom geoms that use emoji or images otherwise (others who also know how to do that and actually have spare time should definitely answer with those as there's likely going to be alot of back-and-forth with the OP with such answers given the fragility of those geoms and I just don't have that cycles it will likely take to keep tweaking an answer incessantly until all those work on the OP's system).



          library(hrbrthemes)
          library(tidyverse)
          # Create data
          set.seed(2018-11-14)

          data_frame(
          cond = LETTERS[1:26],
          value1 = abs(rnorm(26)) * 2,
          value2 = value1 + 1 + rnorm(26, sd = 1)
          ) -> xdf

          # ensure there are representative conditions to test logic
          xdf[9, "value1"] <- 0
          xdf[10, "value1"] <- 1.1
          xdf[11, "value2"] <- 0
          xdf[21, "value2"] <- -xdf[21, "value2"]
          xdf[26, "value1"] <- -xdf[26, "value1"]
          xdf[26, "value2"] <- 0

          print(xdf, n=26)

          # Reorder data using average?
          rowwise(xdf) %>%
          mutate(mymean = mean(c(value1, value2))) %>%
          arrange(mymean) %>%
          mutate(x = factor(cond, cond)) %>%
          mutate(left_shp = case_when(
          (value1 < 0) | (value2 < 0) ~ "<",
          (value1 == 0) | (value2 == 0) ~ "•",
          (value1 > 0) & (value2 > 0) ~ ">"
          )) %>%
          mutate(left_size = case_when(
          (value1 < 0) | (value2 < 0) ~ 6,
          (value1 == 0) | (value2 == 0) ~ 11,
          (value1 > 0) & (value2 > 0) ~ 6
          )) %>%
          mutate(hjust = case_when(
          (value1 < 0) | (value2 < 0) ~ 0.2,
          (value1 == 0) | (value2 == 0) ~ 0.5,
          (value1 > 0) & (value2 > 0) ~ 0.5
          )) %>%
          mutate(
          col = case_when(
          (value1 < 0) | (value2 < 0) ~ "#cb181d",
          (value1 == 0) | (value2 == 0) ~ "#2171b5",
          (value1 > 0) & (value2 > 0) ~ "#238b45"
          )
          ) %>%
          mutate(left = ifelse(value1 < value2, value1, value2)) %>%
          mutate(right = ifelse(value1 > value2, value1, value2)) -> xdf

          # plot
          ggplot(xdf) +
          geom_segment(
          aes(x = left, xend = right, y = cond, yend = cond, color = I(col)), size = 1
          ) +
          geom_text(
          aes(x = left, y = cond, color = col, label = left_shp, hjust = I(hjust), size = I(left_size))
          ) +
          geom_point(aes(x = right, y = cond, color = col), size = 3) +
          labs(x=NULL, y= NULL) +
          theme_ipsum_rc(grid="X")


          enter image description here






          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%2f53297520%2fggplot-custom-endpoints-of-lollipop-charts%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 is one way but you'll have to build the legend (if any) manually. I am concerned that you are masking which of value1 or value2 is on the left by the way you want to set the color (IMO the color should always be associated with the measure name but you are the one who wants to do it this way). It uses plain text shapes for the left bullet since you'd have to do some interesting "arrow()"-ing or use custom geoms that use emoji or images otherwise (others who also know how to do that and actually have spare time should definitely answer with those as there's likely going to be alot of back-and-forth with the OP with such answers given the fragility of those geoms and I just don't have that cycles it will likely take to keep tweaking an answer incessantly until all those work on the OP's system).



            library(hrbrthemes)
            library(tidyverse)
            # Create data
            set.seed(2018-11-14)

            data_frame(
            cond = LETTERS[1:26],
            value1 = abs(rnorm(26)) * 2,
            value2 = value1 + 1 + rnorm(26, sd = 1)
            ) -> xdf

            # ensure there are representative conditions to test logic
            xdf[9, "value1"] <- 0
            xdf[10, "value1"] <- 1.1
            xdf[11, "value2"] <- 0
            xdf[21, "value2"] <- -xdf[21, "value2"]
            xdf[26, "value1"] <- -xdf[26, "value1"]
            xdf[26, "value2"] <- 0

            print(xdf, n=26)

            # Reorder data using average?
            rowwise(xdf) %>%
            mutate(mymean = mean(c(value1, value2))) %>%
            arrange(mymean) %>%
            mutate(x = factor(cond, cond)) %>%
            mutate(left_shp = case_when(
            (value1 < 0) | (value2 < 0) ~ "<",
            (value1 == 0) | (value2 == 0) ~ "•",
            (value1 > 0) & (value2 > 0) ~ ">"
            )) %>%
            mutate(left_size = case_when(
            (value1 < 0) | (value2 < 0) ~ 6,
            (value1 == 0) | (value2 == 0) ~ 11,
            (value1 > 0) & (value2 > 0) ~ 6
            )) %>%
            mutate(hjust = case_when(
            (value1 < 0) | (value2 < 0) ~ 0.2,
            (value1 == 0) | (value2 == 0) ~ 0.5,
            (value1 > 0) & (value2 > 0) ~ 0.5
            )) %>%
            mutate(
            col = case_when(
            (value1 < 0) | (value2 < 0) ~ "#cb181d",
            (value1 == 0) | (value2 == 0) ~ "#2171b5",
            (value1 > 0) & (value2 > 0) ~ "#238b45"
            )
            ) %>%
            mutate(left = ifelse(value1 < value2, value1, value2)) %>%
            mutate(right = ifelse(value1 > value2, value1, value2)) -> xdf

            # plot
            ggplot(xdf) +
            geom_segment(
            aes(x = left, xend = right, y = cond, yend = cond, color = I(col)), size = 1
            ) +
            geom_text(
            aes(x = left, y = cond, color = col, label = left_shp, hjust = I(hjust), size = I(left_size))
            ) +
            geom_point(aes(x = right, y = cond, color = col), size = 3) +
            labs(x=NULL, y= NULL) +
            theme_ipsum_rc(grid="X")


            enter image description here






            share|improve this answer




























              0














              This is one way but you'll have to build the legend (if any) manually. I am concerned that you are masking which of value1 or value2 is on the left by the way you want to set the color (IMO the color should always be associated with the measure name but you are the one who wants to do it this way). It uses plain text shapes for the left bullet since you'd have to do some interesting "arrow()"-ing or use custom geoms that use emoji or images otherwise (others who also know how to do that and actually have spare time should definitely answer with those as there's likely going to be alot of back-and-forth with the OP with such answers given the fragility of those geoms and I just don't have that cycles it will likely take to keep tweaking an answer incessantly until all those work on the OP's system).



              library(hrbrthemes)
              library(tidyverse)
              # Create data
              set.seed(2018-11-14)

              data_frame(
              cond = LETTERS[1:26],
              value1 = abs(rnorm(26)) * 2,
              value2 = value1 + 1 + rnorm(26, sd = 1)
              ) -> xdf

              # ensure there are representative conditions to test logic
              xdf[9, "value1"] <- 0
              xdf[10, "value1"] <- 1.1
              xdf[11, "value2"] <- 0
              xdf[21, "value2"] <- -xdf[21, "value2"]
              xdf[26, "value1"] <- -xdf[26, "value1"]
              xdf[26, "value2"] <- 0

              print(xdf, n=26)

              # Reorder data using average?
              rowwise(xdf) %>%
              mutate(mymean = mean(c(value1, value2))) %>%
              arrange(mymean) %>%
              mutate(x = factor(cond, cond)) %>%
              mutate(left_shp = case_when(
              (value1 < 0) | (value2 < 0) ~ "<",
              (value1 == 0) | (value2 == 0) ~ "•",
              (value1 > 0) & (value2 > 0) ~ ">"
              )) %>%
              mutate(left_size = case_when(
              (value1 < 0) | (value2 < 0) ~ 6,
              (value1 == 0) | (value2 == 0) ~ 11,
              (value1 > 0) & (value2 > 0) ~ 6
              )) %>%
              mutate(hjust = case_when(
              (value1 < 0) | (value2 < 0) ~ 0.2,
              (value1 == 0) | (value2 == 0) ~ 0.5,
              (value1 > 0) & (value2 > 0) ~ 0.5
              )) %>%
              mutate(
              col = case_when(
              (value1 < 0) | (value2 < 0) ~ "#cb181d",
              (value1 == 0) | (value2 == 0) ~ "#2171b5",
              (value1 > 0) & (value2 > 0) ~ "#238b45"
              )
              ) %>%
              mutate(left = ifelse(value1 < value2, value1, value2)) %>%
              mutate(right = ifelse(value1 > value2, value1, value2)) -> xdf

              # plot
              ggplot(xdf) +
              geom_segment(
              aes(x = left, xend = right, y = cond, yend = cond, color = I(col)), size = 1
              ) +
              geom_text(
              aes(x = left, y = cond, color = col, label = left_shp, hjust = I(hjust), size = I(left_size))
              ) +
              geom_point(aes(x = right, y = cond, color = col), size = 3) +
              labs(x=NULL, y= NULL) +
              theme_ipsum_rc(grid="X")


              enter image description here






              share|improve this answer


























                0












                0








                0







                This is one way but you'll have to build the legend (if any) manually. I am concerned that you are masking which of value1 or value2 is on the left by the way you want to set the color (IMO the color should always be associated with the measure name but you are the one who wants to do it this way). It uses plain text shapes for the left bullet since you'd have to do some interesting "arrow()"-ing or use custom geoms that use emoji or images otherwise (others who also know how to do that and actually have spare time should definitely answer with those as there's likely going to be alot of back-and-forth with the OP with such answers given the fragility of those geoms and I just don't have that cycles it will likely take to keep tweaking an answer incessantly until all those work on the OP's system).



                library(hrbrthemes)
                library(tidyverse)
                # Create data
                set.seed(2018-11-14)

                data_frame(
                cond = LETTERS[1:26],
                value1 = abs(rnorm(26)) * 2,
                value2 = value1 + 1 + rnorm(26, sd = 1)
                ) -> xdf

                # ensure there are representative conditions to test logic
                xdf[9, "value1"] <- 0
                xdf[10, "value1"] <- 1.1
                xdf[11, "value2"] <- 0
                xdf[21, "value2"] <- -xdf[21, "value2"]
                xdf[26, "value1"] <- -xdf[26, "value1"]
                xdf[26, "value2"] <- 0

                print(xdf, n=26)

                # Reorder data using average?
                rowwise(xdf) %>%
                mutate(mymean = mean(c(value1, value2))) %>%
                arrange(mymean) %>%
                mutate(x = factor(cond, cond)) %>%
                mutate(left_shp = case_when(
                (value1 < 0) | (value2 < 0) ~ "<",
                (value1 == 0) | (value2 == 0) ~ "•",
                (value1 > 0) & (value2 > 0) ~ ">"
                )) %>%
                mutate(left_size = case_when(
                (value1 < 0) | (value2 < 0) ~ 6,
                (value1 == 0) | (value2 == 0) ~ 11,
                (value1 > 0) & (value2 > 0) ~ 6
                )) %>%
                mutate(hjust = case_when(
                (value1 < 0) | (value2 < 0) ~ 0.2,
                (value1 == 0) | (value2 == 0) ~ 0.5,
                (value1 > 0) & (value2 > 0) ~ 0.5
                )) %>%
                mutate(
                col = case_when(
                (value1 < 0) | (value2 < 0) ~ "#cb181d",
                (value1 == 0) | (value2 == 0) ~ "#2171b5",
                (value1 > 0) & (value2 > 0) ~ "#238b45"
                )
                ) %>%
                mutate(left = ifelse(value1 < value2, value1, value2)) %>%
                mutate(right = ifelse(value1 > value2, value1, value2)) -> xdf

                # plot
                ggplot(xdf) +
                geom_segment(
                aes(x = left, xend = right, y = cond, yend = cond, color = I(col)), size = 1
                ) +
                geom_text(
                aes(x = left, y = cond, color = col, label = left_shp, hjust = I(hjust), size = I(left_size))
                ) +
                geom_point(aes(x = right, y = cond, color = col), size = 3) +
                labs(x=NULL, y= NULL) +
                theme_ipsum_rc(grid="X")


                enter image description here






                share|improve this answer













                This is one way but you'll have to build the legend (if any) manually. I am concerned that you are masking which of value1 or value2 is on the left by the way you want to set the color (IMO the color should always be associated with the measure name but you are the one who wants to do it this way). It uses plain text shapes for the left bullet since you'd have to do some interesting "arrow()"-ing or use custom geoms that use emoji or images otherwise (others who also know how to do that and actually have spare time should definitely answer with those as there's likely going to be alot of back-and-forth with the OP with such answers given the fragility of those geoms and I just don't have that cycles it will likely take to keep tweaking an answer incessantly until all those work on the OP's system).



                library(hrbrthemes)
                library(tidyverse)
                # Create data
                set.seed(2018-11-14)

                data_frame(
                cond = LETTERS[1:26],
                value1 = abs(rnorm(26)) * 2,
                value2 = value1 + 1 + rnorm(26, sd = 1)
                ) -> xdf

                # ensure there are representative conditions to test logic
                xdf[9, "value1"] <- 0
                xdf[10, "value1"] <- 1.1
                xdf[11, "value2"] <- 0
                xdf[21, "value2"] <- -xdf[21, "value2"]
                xdf[26, "value1"] <- -xdf[26, "value1"]
                xdf[26, "value2"] <- 0

                print(xdf, n=26)

                # Reorder data using average?
                rowwise(xdf) %>%
                mutate(mymean = mean(c(value1, value2))) %>%
                arrange(mymean) %>%
                mutate(x = factor(cond, cond)) %>%
                mutate(left_shp = case_when(
                (value1 < 0) | (value2 < 0) ~ "<",
                (value1 == 0) | (value2 == 0) ~ "•",
                (value1 > 0) & (value2 > 0) ~ ">"
                )) %>%
                mutate(left_size = case_when(
                (value1 < 0) | (value2 < 0) ~ 6,
                (value1 == 0) | (value2 == 0) ~ 11,
                (value1 > 0) & (value2 > 0) ~ 6
                )) %>%
                mutate(hjust = case_when(
                (value1 < 0) | (value2 < 0) ~ 0.2,
                (value1 == 0) | (value2 == 0) ~ 0.5,
                (value1 > 0) & (value2 > 0) ~ 0.5
                )) %>%
                mutate(
                col = case_when(
                (value1 < 0) | (value2 < 0) ~ "#cb181d",
                (value1 == 0) | (value2 == 0) ~ "#2171b5",
                (value1 > 0) & (value2 > 0) ~ "#238b45"
                )
                ) %>%
                mutate(left = ifelse(value1 < value2, value1, value2)) %>%
                mutate(right = ifelse(value1 > value2, value1, value2)) -> xdf

                # plot
                ggplot(xdf) +
                geom_segment(
                aes(x = left, xend = right, y = cond, yend = cond, color = I(col)), size = 1
                ) +
                geom_text(
                aes(x = left, y = cond, color = col, label = left_shp, hjust = I(hjust), size = I(left_size))
                ) +
                geom_point(aes(x = right, y = cond, color = col), size = 3) +
                labs(x=NULL, y= NULL) +
                theme_ipsum_rc(grid="X")


                enter image description here







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 14 '18 at 12:43









                hrbrmstrhrbrmstr

                60.7k688150




                60.7k688150






























                    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%2f53297520%2fggplot-custom-endpoints-of-lollipop-charts%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

                    Xamarin.iOS Cant Deploy on Iphone

                    Glorious Revolution

                    Dulmage-Mendelsohn matrix decomposition in Python