R ggplot. КАК построить график только для переменных> 0? - PullRequest
0 голосов
/ 10 июля 2020

Я строю график количества заражений covid19 PCR в городах моей провинции. Проблема в том, что во многих городах нет положительных результатов теста PCR. Мне нужен способ построить только города с как минимум 1+ PCR.

Это мой код:

library(tidyverse)
library('data.table') 

dfcsv1 <- read.csv("https://dadesobertes.gva.es/datastore/dump/ee17a346-a596-4866-a2ac-a530eb811737?bom=True", 
                   encoding = "UTF-8", header = TRUE, sep = ",")
colnames(dfcsv1) <- c("code","code2","Municipio", "PCR", "TasaPCR", "PCR14", 
                      "TasaPCR14", "Muertos", "TasaMuertos")

dfcsv1$TasaMuertos = as.numeric(gsub(",","\\.",dfcsv1$TasaMuertos))
dfcsv1$TasaPCR = as.numeric(gsub(",","\\.",dfcsv1$TasaPCR))
dfcsv1$TasaPCR14 = as.numeric(gsub(",","\\.",dfcsv1$TasaPCR14))

dfcsv1 %>%
  mutate(Municipio = fct_reorder(Municipio, PCR14)) %>%  
  
  ggplot(aes(x=Municipio, y=PCR14, fill =TasaPCR14)) +
  geom_bar(stat="identity", width=0.6) +
  coord_flip() +
  geom_text(data=dfcsv1, aes(y=PCR14,label=PCR14),vjust=1)+  
  scale_fill_gradient(low="steelblue", high="red")

Ответы [ 2 ]

2 голосов
/ 10 июля 2020

Как уже говорили другие в комментариях, вам необходимо отфильтровать PCR14, который больше 0, перед изменением порядка уровней факторов. Однако вам также необходимо удалить параметр data из geom_text, иначе все эти уровни факторов вернутся, и у вас будет большой беспорядок. Он уже немного переполнен с удаленными нулевыми уровнями.

Я думаю, вам также следует изменить vjust на hjust, чтобы поместить текст в более удобное положение, поскольку вы перевернули координаты с компенсацией увеличьте (перевернутый) диапазон оси Y, чтобы приспособить его:

dfcsv1 %>%
  filter(PCR14 > 0) %>%
  mutate(Municipio = fct_reorder(Municipio, PCR14)) %>%
  ggplot(aes(x = Municipio, y = PCR14, fill = TasaPCR14)) +
    geom_bar(stat = "identity", width = 0.6) + 
    coord_flip() +
    geom_text(aes(y = PCR14,label = PCR14), hjust= -0.5) +
    scale_fill_gradient(low = "steelblue", high = "red") +
    ylim(c(0, 45))

enter image description here

Incidentally, it looks a lot better with the ones removed too:

    dfcsv1 %>%
      filter(PCR14 > 1) %>%
      mutate(Municipio = fct_reorder(Municipio, PCR14)) %>%
      ggplot(aes(x=Municipio, y=PCR14, fill =TasaPCR14)) +
      geom_bar(stat="identity", width=0.6) + coord_flip() +
      geom_text(aes(y=PCR14,label=PCR14),hjust=-0.5)+  
      scale_fill_gradient(low="steelblue", high="red") +
      ylim(c(0, 45))

введите описание изображения здесь

0 голосов
/ 10 июля 2020

Как правило, независимо от типа графика или от того, используете ли вы ggplot, lattice или базовую plot функцию, сначала должно выполняться подмножество.

plot(x[y>0] , y[y>0]) 

Остальное эстетика.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...