web-dev-qa-db-ja.com

カスタムggplot2軸とラベルのフォーマット

私は、有益で、明確で、きちんと見えるラベルを描こうとしています。

私は 次の例でした で、labelaxisのフォーマットについてもう1つ質問があります。

たとえば、ユーロでのブランド、カテゴリ、支出を含む売上データがあります。 EURの合計が大きい場合(数百万以上)、ラベルは読みにくく、情報が得られません。

その結果、_x-axis_は_Scientific notation_にあり、見た目も非常に不自然です。

私はカスタムの方法でラベルをフォーマットすることに成功しました:それはEurを数千で示しています。 geom_text(aes(label= paste(round(EUR/1000,0),"€"), y=pos), colour="white")より簡単な方法または自動化された方法はありますか?

_Scientific notation_は本当に不明瞭に見えるので、軸についてはscale_y_continuous(formatter = "dollar")を使用してみましたが、これは機能しないようです。さらに、ドルの代わりにEurも実装されているかどうかを確認できませんでした。 thousandsに_y-axis_を表示するのが最適だと思います。解決策はありますか?

また、私は再現可能な例を囲みます:

_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

11
AK47

ドルの代わりにユーロの接頭辞を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

15
eipi10

これも機能します

scale_y_continuous(labels = function(x) paste0(x, "€"))

あなたは€の代わりにあなたが望むシンボルを置くことができます

2
Asif LalDin

@ AK47光沢のあるユーロ記号の解析の問題があります。

これに置き換えてみてください:(\ u20AC)

これまでのところ、これはかなりうまくいきました。

2
Ilias Liapikos