Функция Plot отображает только одну сумму в этом кадре данных.Что может быть причиной? - PullRequest
0 голосов
/ 26 ноября 2018

Я создал фрейм данных длинного формата

  Category           Amount
1    Angry 0.00000010230325
2     Fear 0.00000007393743
3    Happy 0.99942147731781
4  Neutral 0.00057571416255
5      Sad 0.00000002021321
6 Surprise 0.00000260657316

И код:

library(tidyverse)
library(ggplot2)
# There are plenty of ways to reshape the data frame,
# but I think `tidyr::gather()` is the easiest
dfr_long <- gather(dfr, key = "Category", value = "Amount")
ggplot(data = dfr_long, aes(x = Category, y = Amount)) +
  geom_bar(stat = "identity")

Однако, как вы видите на изображении, только Happy получает график, а остальныевсе на одном уровне.Я даже пытался изменить ylim на c (-1,0.99), но график все еще выглядит так же.Как я могу это исправить?

plot

1 Ответ

0 голосов
/ 26 ноября 2018

Поскольку ваша претензия к моему комментарию была ужасно неправильной:

read.table(text="Category           Amount
    Angry 0.00000010230325
     Fear 0.00000007393743
    Happy 0.99942147731781
  Neutral 0.00057571416255
      Sad 0.00000002021321
 Surprise 0.00000260657316", header=TRUE, stringsAsFactors=FALSE) -> dfr

ggplot(data = dfr, aes(x = Category, y = 100000000*Amount)) +
  geom_bar(stat = "identity") +
  scale_y_continuous(trans = "log10")

enter image description here

Обратите внимание, что ^^ серьезно искажает данные и требует тонны маркировки , чтобы убедиться, что ваши читатели не неверно истолковали ее.

Это:

ggplot(data = dfr, aes(x = Category, y = Amount)) +
  geom_bar(stat = "identity") +
  scale_y_continuous(trans = "sqrt")

enter image description here

* несколько лучше, но все же требует от вас значительного количества маркировки, чтобы гарантировать, что данные не искажаются.

Это:

options(scipen = 999)

dplyr::arrange(dfr, desc(Amount)) %>% 
  mutate(Category = factor(Category, levels = Category)) %>%
  mutate(txt_col = dplyr::case_when(
    Category == "Happy" ~ "white",
    TRUE ~ "black"
  )) %>% 
  ggplot(aes(x = Category, y = 1)) +
  geom_tile(aes(fill = Amount), color = "white", size=0.125) +
  geom_text(aes(label = Amount, color = I(txt_col)), size=2.5) +
  viridis::scale_fill_viridis(direction = -1) +
  coord_equal() +
  labs(
    x = NULL, y = NULL
  ) + 
  hrbrthemes::theme_ipsum_rc(grid="") +
  theme(axis.text.y = element_blank())

enter image description here

- альтернативный способ отображения данных, но он не более эффективен, чем базовая, упорядоченная таблица IMO.

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