gpt4 book ai didi

r - 自定义 ggplot2 Axis 和标签格式

转载 作者:行者123 更新时间:2023-12-03 01:01:13 26 4
gpt4 key购买 nike

我正在尝试绘制看起来信息丰富、清晰整洁的标签。

was following example并提出了一个关于 labelaxis 格式的问题。

例如,我有销售数据,其中包括品牌、类别和支出(以欧元为单位)。当欧元总额很大(数百万或更多)时,标签看起来真的很难阅读并且没有提供任何信息。

因此,x Axis 采用的是科学计数法,而且看起来也很不干净。

我已经设法以自定义方式格式化标签:它以千为单位显示欧元。 geom_text(aes(label=paste(round(EUR/1000,0),"€"), y=pos), color="white")有没有更简单或自动化的方法?

由于科学记数法看起来真的不清楚,对于 Axis 我尝试使用scale_y_continuous(formatter = "dollar"),但这似乎不起作用。此外,我无法找到是否也实现了 Eur 而不是美元。我相信以显示y轴是最好的。有什么解决办法吗?

另外,我附上可重现的示例:

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

最佳答案

您可以在 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

关于r - 自定义 ggplot2 Axis 和标签格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37662119/

26 4 0