Home > database >  Colors don't stick when lollipop plot is run
Colors don't stick when lollipop plot is run

Time:01-29

I have created a lollipop chart that I love. However, when the code runs to create the plot, the colors of the lines, segments, and points all change from what they were set to. Everything else runs great, so this isn't the end of the world, but I am trying to stick with a color palette throughout a report.

The colors should be this ("#9a0138", and "#000775" specifically): enter image description here

But come out like this: enter image description here Any ideas?

Here is the data:


TabPercentCompliant <- structure(list(Provider_ShortName = c("ProviderA", "ProviderA", "ProviderA", "ProviderB", 
                                      "ProviderB", "ProviderB", "ProviderC", "ProviderC", "ProviderC", "ProviderD"), SubMeasureID = c("AMM2",                                                                                               "FUH7", "HDO", "AMM2", "FUH7", "HDO", "AMM2", "FUH7", "HDO",                                                                                                  "AMM2"), AdaptedCompliant = c(139, 2, 117, 85, 1, 33, 36, 2,                                                                                                                                  22, 43), TotalEligible = c(238, 27, 155, 148, 10, 34, 61, 3,                                                                                                                                                             24, 76), PercentCompliant = c(0.584033613445378, 0.0740740740740741,                                                                                                                                                                                           0.754838709677419, 0.574324324324324, 0.1, 0.970588235294118,                                                                                                                                                                                           0.590163934426229, 0.666666666666667, 0.916666666666667, 0.565789473684211                                                                                                                                                            ), PercentTotalEligible = c(0.00516358587173479, 0.00058578495183546,                                                                                                                                                                                         0.00336283953831467, 0.00321096936561659, 0.000216957389568689,                                                                                                                                                                                        0.000737655124533542, 0.001323440076369, 6.50872168706066e-05,                                                                                                                                                                                         0.000520697734964853, 0.00164887616072203), ClaimsAdjudicatedThrough = structure(c(19024,                                                                                                                                                                                                                                                                           19024, 19024, 19024, 19024, 19024, 19024, 19024, 19024, 19024                                                                                                                                                                                       ), class = "Date"), AdaptedNCQAMean = c(0.57, 0.39, 0.93, 0.57,                                                                                                                                                                                                                                0.39, 0.93, 0.57, 0.39, 0.93, 0.57), PerformanceLevel = c(0.0140336134453782,                                                                                                                                                                                                                                                                                          -0.315925925925926, -0.175161290322581, 0.00432432432432439,                                                                                                                                                                                                                                                                                          -0.29, 0.0405882352941176, 0.0201639344262295, 0.276666666666667,                                                                                                                                                                                                                                                                                          -0.0133333333333334, -0.00421052631578944)), row.names = c(NA,                                                                                                                                                                                                                                                                                                                                                     -10L), class = c("tbl_df", "tbl", "data.frame"))

VBP_Report_Date = "2022-09-01"

And the code for the plot:

Tab_PercentCompliant %>% 
  filter(ClaimsAdjudicatedThrough == VBP_Report_Date) %>%
  ggplot(aes(x = Provider_ShortName, 
             y = PercentCompliant)
  )  
  geom_line(aes(x = Provider_ShortName,
                y = AdaptedNCQAMean,
                group = SubMeasureID,
                color = "#9a0138",
                size = .001)
  )  
  geom_point(aes(color = "#000775",
                 size = (PercentTotalEligible)
  )
  )  
  geom_segment(aes(x = Provider_ShortName,
                   xend = Provider_ShortName,
                   y = 0,
                   yend = PercentCompliant,
                   color = "#000775")
  ) 
  facet_grid(cols = vars(SubMeasureID),
             scales = "fixed",
             space = "fixed") 
  theme_classic() 
  theme(legend.position = "none")   
  theme(panel.spacing = unit(.5, "lines"),
        panel.border = element_rect(
          color = "black", 
          fill = NA, 
          linewidth = .5), 
        panel.grid.major.y = element_line(
          color = "gray", 
          linewidth = .5),
        axis.text.x = element_text(
          angle = 65, 
          hjust=1),
        axis.title.x = element_blank(),
        axis.line = element_blank(),
        strip.background = element_rect(
          color = NULL, 
          fill = "#e1e7fa")) 
  scale_y_continuous(labels = scales::percent) 
  labs(title = "Test",
       subtitle = "Test",
       caption = "Test")

CodePudding user response:

If you have an aesthetic constant, it is often easier / better to have it "outside" your aes call. If you want to have a legend for your color, then you need to keep it "inside", but you will need to manually set the colors with scale_color/fill_manual.

I've had to cut down quite a lot in your code to make it work. I've also removed bits that are extraneous to the problem. I've removed line size = 0.001 or the line wasn't visible. I've removed the weird filter step or the plot wasn't possible.

Tips: when defining a global aesthetic with ggplot(aes(x = ... etc), you don't need to specify this aesthetic in each geom layer (those aesthetics will be inherited)- makes a more concise / readable code.

library(ggplot2)

ggplot(TabPercentCompliant, aes(x = Provider_ShortName, y = PercentCompliant))  
  geom_line(aes(y = AdaptedNCQAMean, group = SubMeasureID), 
            color = "#9a0138")  
  geom_point(aes(size = PercentTotalEligible), color = "#000775")  
  geom_segment(aes(xend = Provider_ShortName, y = 0, yend = PercentCompliant), 
                   color = "#000775")  
  facet_grid(~SubMeasureID)  
  theme(strip.background = element_rect(color = NULL, fill = "#e1e7fa"))

enter image description here

CodePudding user response:

Here is the final code. Thanks again tjebo!


# Lollipop Chart ----------------------------------------------------------

Tab_PercentCompliant %>% 
  filter(ClaimsAdjudicatedThrough == VBP_Report_Date) %>%
  ggplot(aes(x = Provider_ShortName, 
             y = PercentCompliant)
         )  
  geom_line(aes(y = AdaptedNCQAMean,
                group = SubMeasureID),
                color = "#9a0138"
            )  
  geom_point(aes(size = PercentTotalEligible),
                 color = "#000775",
            )  
  geom_segment(aes(xend = Provider_ShortName,
                   y = 0,
                   yend = PercentCompliant),
                   color = "#000775"
               ) 
  facet_grid(cols = vars(SubMeasureID)
             ) 
  theme_bw() 
  theme(legend.position = "none",
        axis.text.x = element_text(
          angle = 65, 
          hjust=1),
        axis.title.x = element_blank(),
        axis.line = element_blank(),
        strip.background = element_rect(
          fill = "#e1e7fa")) 
  scale_y_continuous(labels = scales::percent) 
  labs(title = "Test",
       subtitle = "Test",
       caption = "Test")

enter image description here

  • Related