Add counts to legend labels

天涯浪子 提交于 2019-12-25 01:25:44

问题


I am trying to add the counts/percentages to legend labels of a pie chart. Pie charts are terrible, I know, but that's not the point of this post. I would like to paste the values of "Count" to the "Wound.Type" label on the legend but can't figure out how to access the Counts for each iteration of the following code. The goal would be something along the lines of "Laceration 5" or whatever the count is. I have tried ".~Count" and ".~Wound.Type", ".$Count" and ".$Wound.Type" but I don't understand how to access the specific values I'd like.

p1 <- DF %>% 
  split(.$ServiceSite) %>%
  imap(function(data, site) {
    data %>%
  group_by(ServiceSite, Wound.Type) %>%
  summarise(Count = n()) %>%
   mutate(share = round(Count / sum(Count), digits = 2)) %>%
    ggplot(aes(x = "", y = Count, fill = Wound.Type)) +
    geom_col(width = 1) +
    scale_fill_discrete(labels = paste(.$Wound.Type, .$Count))+
    facet_grid(facets = .~ServiceSite, labeller = label_value)+
    geom_text(aes(label = Count, y = ), position = position_stack(vjust = 0.5)) +
    coord_polar(theta = "y")+
    labs(caption = "Visits from 1/1/18-6/30/18")+
    ggtitle("Count of Unique Wound Occurrences")+
    theme(plot.caption = element_text(size= 8, hjust = .5))+
    theme(plot.title = element_text(hjust = 0.5))+
    theme(plot.subtitle = element_text(hjust = 0.5))+
    ylab("")+
    xlab("")+
    theme(axis.text = element_blank(),
        axis.ticks = element_blank(),
        panel.grid  = element_blank())
  })
p1

Current output:

data:

ServiceSite.x InitialType

2   Dermatitis
2   Diabetic
2   Pressure Injury
2   Pressure Injury
3   Pressure Injury
3   Other
3   Laceration
3   Other
4   Pressure Injury
4   MASD
4   Blister (Non-Pressure)
4   Skin Tear
4   Pressure Injury
5   Skin Tear
5   Other
5   Contusion
5   Skin Tear
5   Surgical(Non-Healing)
5   Pressure Injury
6   Pressure Injury
1   Pressure Injury
6   Pressure Injury
6   MASD
1   Surgical(Non-Healing)
1   Pressure Injury
1   Skin Tear
1   Contusion

回答1:


Generally you can use your function arguments for this. Since the data argument refers to the dataset, you can refer to variables in the original dataset directly. In your example that would be data$Wound.Type.

However, you add the Count variable dynamically within the function so this isn't in the dataset you pass to the data argument. Instead of passing the dataset directly to ggplot() you can make a new object within your function. This will allow you to refer to variables in this "mutated" dataset.

Here is an example, where I make a new dataset called dat2 that is used within ggplot() and can be used for the fill names.

The key changes to the function are making a new object within the function:

dat2 = data %>%
            group_by(ServiceSite, Wound.Type) %>%
            summarise(Count = n()) %>%
            mutate(share = round(Count / sum(Count), digits = 2)) 

And using this object for the fill labels:

scale_fill_discrete(labels = paste(dat2$Wound.Type, dat2$Count))

The changes along with the rest of your:

DF %>% 
     split(.$ServiceSite) %>%
     imap(function(data, site) {
          dat2 = data %>%
               group_by(ServiceSite, Wound.Type) %>%
               summarise(Count = n()) %>%
               mutate(share = round(Count / sum(Count), digits = 2)) 
          ggplot(dat2, aes(x = "", y = Count, fill = Wound.Type)) +
               geom_col(width = 1) +
               scale_fill_discrete(labels = paste(dat2$Wound.Type, dat2$Count))+
               facet_grid(facets = .~ServiceSite, labeller = label_value)+
               geom_text(aes(label = Count, y = ), position = position_stack(vjust = 0.5)) +
               coord_polar(theta = "y")+
               labs(caption = "Visits from 1/1/18-6/30/18")+
               ggtitle("Count of Unique Wound Occurrences")+
               theme(plot.caption = element_text(size= 8, hjust = .5))+
               theme(plot.title = element_text(hjust = 0.5))+
               theme(plot.subtitle = element_text(hjust = 0.5))+
               ylab("")+
               xlab("")+
               theme(axis.text = element_blank(),
                     axis.ticks = element_blank(),
                     panel.grid  = element_blank())
     })


来源:https://stackoverflow.com/questions/51616221/add-counts-to-legend-labels

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!