web-dev-qa-db-ja.com

R付きの美しい円グラフ

この単純なデータがあるとしましょう:

 mydata <- data.frame(group=c("A", "B", "0", "AB"), FR=c(20, 32, 32, 16))

このデータフレームから円グラフを作成する場合、次のことができます。

 with(mydata,pie(FR, labels=paste0(as.character(group), " ", FR, "%"), radius=1))

basic pie

それは非常に簡単ですが、受け入れられます。

Ggplot2またはラティスで似たようなものを取得するにはどうすればよいですか?

多くの試行錯誤の後、私は持っています

ggplot(mydata, aes(x = factor(1), y=FR,fill=factor(group)) ) + geom_bar(width = 1,stat="identity")+coord_polar(theta = "y") 

ggplot

はるかに複雑でandいです。簡単なはずではないですか? ggplotの本は、いくつかの例を示しているだけで、円グラフの使用を推奨していません。

ラティスはさらに悪いです、あなたはそれを怖がらせるために多くの行が必要です。

素敵でシンプルな円グラフを手に入れるのを手伝ってくれませんか?たとえば、次のような...

example1

example2

20行のコードなしで簡単に実行できるRパッケージはありませんか?

11
skan

plotrixパッケージのpie3D()関数で試すことができます:

library(plotrix)
pie3D(mydata$FR, labels = mydata$group, main = "An exploded 3D pie chart", explode=0.1, radius=.9, labelcex = 1.2,  start=0.7)

enter image description here

13
RHertel

ここにいくつかの便利なヒント:

ソース: ダークホース分析:パイの回収

(srsly tho、棒グラフの何が問題になっていますか?)

注:Dark Horse Analyticsが何をするのかわかりません。これは、私のお気に入りのアンチパイデモイメージです。

40
hrbrmstr

なぜsquare円グラフではないのですか?

devtools::install_github("hrbrmstr/waffle")
library(waffle)

mydata <- c(`A`=20, `B`=32, `0`=32, `AB`=16)
waffle(mydata, title = "Yummy waffle pie!")

enter image description here


情報の次元が複数ある場合、別のオプションは sunburstR です。 @rawr post からのbrowsersデータを使用すると、次のことができます。

library(sunburstR)
library(dplyr)
library(tidyr)
browsers %>%
  unite(bv, browser, version, sep = "-") %>%
  select(bv, share) %>%
  sunburst(., count = TRUE)

enter image description here

treemapを使用できます(インタラクティブバージョンの場合は、@ timelyportfolioのd3treeRパッケージ

library(treemap)
tm <- treemap(
  browsers,
  index=c("browser", "version"),
  vSize="share",
  vColor="share",
  type="value"
)

enter image description here

サンキーダイアグラムを使用することもできます(networkD3パッケージ

library(networkD3)
df <- browsers %>%
  mutate_each(funs(as.character), browser, version) %>%
  mutate(bn = group_indices_(., .dots = "browser"), 
         cn = max(bn) + row_number()) 

links <- select(df, bn, cn, share)
nodes <- data.frame(name = c("", sort(unique(df$browser)), df$version))

sankeyNetwork(Links = links, Nodes = nodes, Source = "bn",
              Target = "cn", Value = "share", NodeID = "name",
              fontSize = 12, nodeWidth = 30)

enter image description here

39
Steven Beaupré