Как отобразить другие метки, отличные от тех, которые используются для переменных - PullRequest
2 голосов
/ 03 мая 2020

Здравствуйте. Я хотел бы представить график, чтобы заболевания, связанные с одной и той же функциональной системой, были окрашены одинаково. Поскольку легче сгруппировать подобные заболевания по их коду, я сделал это. Тем не менее, это ярлыки болезней, которые я хочу отображать. Но я не могу сгруппировать болезни, которые похожи по их меткам, потому что метки не имеют ничего общего (в моем реальном кадре данных), и я не могу сделать это вручную, так как работаю с большой базой данных. Вот как может выглядеть моя база данных.

ID=1:20
Hospital<-sample(c(rep("A",10),rep("B",10)))
Disease<-c("D1000",rep("D2001",2),rep("D2000",3),rep("D3000",4),
           rep("D3001",2),rep("D3003",4),rep("D4001",3),"D4002")
labels<-c("Infection",rep("Cancer.type1",2),rep("Cancer.type0",3),
          rep("Trauma.type0",4),rep("Trauma.type1",2),
          rep("Trauma.type3",4),rep("Heart.type1",3),"Heary.type2"  )
data<-data.frame(ID,Hospital,Disease,labels)
data$Disease<-as.factor(data$Disease)

А ниже показано, как я строю диаграмму. Все болезни, начинающиеся с D4, имеют одинаковые цвета. Все те, которые начинаются с D3, также имеют цвета. И так далее. Теперь я хочу, чтобы на графиках появлялись ярлыки болезней, а не их коды.

data%>%count(Disease)%>%
ggplot(aes(x=Disease,y=n))+
geom_col(aes(fill=substr(Disease,1,2)),show.legend = F)+
coord_flip()

enter image description here

Ответы [ 2 ]

3 голосов
/ 04 мая 2020

Вам просто нужно добавить labels к вашей функции count и основать график на этом:

data %>% 
  count(labels, Disease) %>%
  ggplot(aes(x = labels, y = n)) +
    geom_col(aes(fill = substr(Disease,1,2)), show.legend = FALSE) +
    coord_flip()

enter image description here

2 голосов
/ 04 мая 2020

Используя scale_x_discrete(labels= ...), вы можете установить метки (поскольку вы использовали coord_flip, это x вместо y). См., Например, Изменить отметки раздел здесь . Вы должны предоставить ему именованный вектор, такой как тот, который я генерирую в первой строке ниже:

labels <- setNames(labels, Disease)

data%>%count(Disease)%>%
  ggplot(aes(x=Disease,y=n))+
  geom_col(aes(fill=substr(Disease,1,2)),show.legend = F)+
  coord_flip() +
  scale_x_discrete(labels=labels)
...