#r #ggplot2
#r #ggplot2
Вопрос:
На данный момент у меня есть две проблемы, которые, похоже, я не могу исправить
1.My метка оси y ggplot перекрывается, так как я ввел ранжирование для упорядочения значений
2. Я хотел бы иметь порядок стран, как я упорядочил данные («US», «GB», «CN», «FR», «JP»), но метод facet_wrap, похоже, изменяет их порядок.
Ответ №1:
Вторая проблема может быть легко решена путем установки (!!) уровней факторов, используя, например mutate
.
Что касается первой проблемы. Из изображения вашего набора данных …
Я бы предположил, что ваши данные сгруппированы по странам. Следовательно, ваши ряды дублируются, и при настройке разрывов осей и меток через scale_x_continuous
вы получаете беспорядок дублированных меток.
Чтобы предотвратить это: проверьте свои данные, убедитесь, что они не сгруппированы, чтобы получить уникальные ранги.
Вторым подходом к решению этой проблемы было бы использование tidytext::reorder_within
and tidy text::scale_x_reordered
, как я делаю в своем подходе ниже:
Используя некоторые случайные данные примера, попробуйте это:
library(ggplot2)
library(dplyr)
library(hrbrthemes)
library(tidytext)
# Random example data
set.seed(42)
datos2 <- data.frame(
customer_country = rep(c("US","GB", "CN", "FR", "JP"), each = 10),
category = rep(LETTERS[1:10], 5),
sum_amount = runif(5 * 10)
)
detail <- subset(datos2, customer_country %in% c("US","GB", "CN", "FR", "JP"))
detail <- detail %>%
mutate(customer_country = factor(customer_country, levels = c("US","GB", "CN", "FR", "JP")),
rank = tidytext::reorder_within(category, sum_amount, customer_country))
ggplot(detail)
geom_segment( aes(x=rank, xend=rank, y=0, yend=sum_amount), color="black")
geom_point( aes(x=rank, y=sum_amount, color=customer_country))
coord_flip()
theme_ipsum()
theme(
legend.position = "none",
panel.border = element_blank(),
panel.spacing = unit(0.1, "lines"),
strip.text.x = element_text(size = 8)
, element_line(size = 11)
)
xlab("")
ylab("Value of Y")
facet_wrap(~customer_country, ncol=1, scale="free")
tidytext::scale_x_reordered()