пропорциональная гистограмма ggplot2: цвет только 1 из 17 уровней на гистограмму - PullRequest
1 голос
/ 11 апреля 2020

Я довольно плохо знаком с R и SO и был бы признателен за любую помощь, которую вы можете оказать в этом.

У меня есть данные класса factor с 17 уровнями. Я использую library(ggplot2) и geom_bar(position="fill") для создания пропорционального гистограммы. Код и вывод / график приведены ниже.

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

Надеюсь, это имеет смысл - с удовольствием отредактирую и предоставлю больше информации. Я был бы признателен за любые указания или помощь по этому вопросу. Большое спасибо!


Код

# libraries
library(tidyverse) # for the plot
library(ggplot2) # for the plot
library(scales) # for the x-axis scaling
library(lubridate) # for the "POSIXct" and "POSIXt" class

#data classes
class(df.forum$p.date) # "POSIXct" "POSIXt"
class(df.forum$p.forum) # factor

# the plot
df.forum %>% 
  ggplot(aes(x = p.date, fill = factor(p.forum))) +
  geom_bar(position = "fill", stat = "count", show.legend = TRUE) + 
  theme(axis.text.x = element_text(angle = 90, hjust = 1,vjust = 0.2)) +
  scale_x_datetime(date_breaks = "1 month",labels = date_format("%b %Y"), limits = c(mdy_hms("10/1/13 20:00:00"),mdy_hms("5/1/14 20:00:00")))

Сюжет

ggplot2 proportional bar graph plotted

Редактирование / Воспроизводимый пример

Я также попытался настроить воспроизводимый пример, и, похоже, здесь могут быть проблемы:

    # data
d <- as.POSIXct(
  c("2020-01-01", "2020-01-01","2020-01-01", 
    "2020-01-02", "2020-01-02", "2020-01-02", 
    "2020-01-03", "2020-01-03", "2020-01-03"))

t <- as.factor(
  c("ATopic", "BTopic", "CTopic",
    "CTopic", "BTopic", "BTopic",
    "CTopic", "ATopic", "BTopic"))

df <- data.frame(d, t)

# the plot
df %>% 
  ggplot(aes(x = d, fill = factor(t))) +
  geom_bar(position = "fill", stat = "count") 

##E rror line: position_stack requires non-overlapping x intervals

Это приводит к следующему графику с ошибкой "position_stack требует неперекрывающихся интервалов x" : enter image description here


Редактировать: применил gghilight как предложено, и это сработало! Вот решение, которое мне дали с facet_wrap() и gghighlight() для людей.

Я также попробовал следующий код:

library(gghighlight)
df %>% 
  ggplot(aes(x = factor(d), fill = factor(t))) +
  geom_bar(position = "stack", stat = "count") +
  facet_wrap(~t) +
  gghighlight()

И вот вывод: enter image description here

1 Ответ

2 голосов
/ 11 апреля 2020

Я думаю, что использование gghighlight (в комбинации facet_wrap) подойдет вам.

Вот пример использования набора данных iris для построения Sepal.Width в зависимости от Sepal.Length для каждого виды. Здесь я использовал facet_wrap для разделения каждого вида и gghighlight, чтобы показать цвет только для одного вида за раз

library(ggplot2)
library(gghighlight)

ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, color = Species))+
  geom_point()+
  facet_wrap(~Species)+
  gghighlight()

enter image description here

Отвечает ли он на ваш вопрос?

Если нет, рассмотрите возможность воспроизведения воспроизводимого примера набора данных ( Как создать отличный воспроизводимый пример R )

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