Вопрос: Настраиваемая ось ggplot2 и форматирование меток


Я пытаюсь нарисовать ярлыки, которые выглядят информативными, ясными и аккуратными.

я следовал примеру  и поднял еще один вопрос о label а также axis форматирование.

Например, у меня есть данные о продажах, которые включают бренд, категории и расходы в евро. Когда сумма EUR большая (миллионы и более) лейблов выглядит очень трудно читать, а не информативно.

В результате, x-axis в Scientific notation а также выглядит действительно нечисто.

Мне удалось форматировать ярлыки по-своему: он показывает Евро в тысячах.   geom_text(aes(label= paste(round(EUR/1000,0),"€"), y=pos), colour="white")  Есть ли более простой или автоматический способ?

В виде Scientific notation выглядит действительно неясным, для оси я попытался использовать scale_y_continuous(formatter = "dollar"), но это, похоже, не работает. Более того, я не смог найти, если есть Eur также реализованы вместо доллара. Я считаю, что было бы лучше показать y-axis в thousands, Любые решения?

Кроме того, я прилагаю воспроизводимый пример:

library(plyr)
library(dplyr)
library(ggplot2)
library(scales)


set.seed(1992)
n=68

Category <- sample(c("Black", "Red", "Blue", "Cyna", "Purple"), n, replace = TRUE, prob = NULL)
Brand <- sample("Brand", n, replace = TRUE, prob = NULL)
Brand <- paste0(Brand, sample(1:5, n, replace = TRUE, prob = NULL))
EUR <- abs(rnorm(n))*100000

df <- data.frame(Category, Brand, EUR)


df.summary = df %>% group_by(Brand, Category) %>% 
  summarise(EUR = sum(EUR)) %>%   # Within each Brand, sum all values in each Category
  mutate( pos = cumsum(EUR)-0.5*EUR)



ggplot(df.summary, aes(x=reorder(Brand,EUR,function(x)+sum(x)), y=EUR, fill=Category)) +
  geom_bar(stat='identity',  width = .7, colour="black", lwd=0.1) +
  geom_text(aes(label=ifelse(EUR>100,paste(round(EUR/1000,0),"€"),""),
                y=pos), colour="white") +
  coord_flip()+
  labs(y="", x="")

enter image description here


5


источник


Ответы:


Вы можете установить префикс в dollar_format для евро вместо долларов:

scale_y_continuous(labels=dollar_format(prefix="€")) +

Это касается проблемы научной нотации.

Чтобы получить все в тысячах, вы можете просто делить на 1000 при создании сводки. Чтобы уменьшить беспорядок, вы можете оставить символ евро в ярлыках бара, но я сохранил символ в примере ниже:

df.summary = df %>% group_by(Brand, Category) %>% 
  summarise(EUR = sum(EUR)/1000) %>%   # Within each Brand, sum all values in each Category
  mutate( pos = (cumsum(EUR)-0.5*EUR))

ggplot(df.summary, aes(x=reorder(Brand,EUR,function(x)+sum(x)), y=EUR, fill=Category)) +
  geom_bar(stat='identity',  width = .7, colour="black", lwd=0.1) +
  geom_text(aes(label=ifelse(EUR>100,paste0("€", round(EUR,0)),""),
                y=pos), colour="white") +
  scale_y_continuous(labels=dollar_format(prefix="€")) +
  coord_flip()+
  labs(y="Thousands of €", x="")

enter image description here


9



@ AK47 есть синтаксический анализ знака Euro в блестящем состоянии.

Попробуйте заменить его следующим: (\ u20AC)

До сих пор он работал очень хорошо.


1