2017-03-15 17 views
0

私は円グラフを作成しており、各スライスの値にラベルを付ける必要があります。私は情報をデータフレームに持っていますが、見える列は関数呼び出しで定義する必要があります。データフレームの棒グラフ/円グラフのラベル

コードは(ちょっと)長いですが、私は1行だけ変更する必要があると思います。私はmainsymas.symbolas.namequoteなどを試してみました。それ以外は何も考えませんでしたが、役に立たなかったのです。

おかげ

library(dplyr) 
library(ggplot2) 
library(gridExtra) 

pie_chart <- function(df, main, labels, labels_title=NULL) { 
    mainsym <- as.symbol(main) 
    labelssym <- as.symbol(labels) 
    # convert the data into percentages. add label position and inner label text 
    df <- df %>% 
    mutate(perc = mainsym/sum(mainsym)) %>% 
    mutate(label_pos = 1 - cumsum(perc) + perc/2, 
      inner_label_text = paste0(round(perc * 100), "%\n",main)) #NEED HELP HERE! Replace 'main' with something 

    #debug print statement 
    print(df) 

    # reorder the category factor levels to order the legend 
    df[[labels]] <- factor(df[[labels]], levels = unique(df[[labels]])) 

    p <- ggplot(data = df, aes_(x = factor(1), y = ~perc, fill = labelssym)) + 

    # make stacked bar chart with black border 
    geom_bar(stat = "identity", color = "black", width = 1) + 

    # add the percents and values to the interior of the chart 
    geom_text(aes(x = 1.25, y = label_pos, label = inner_label_text), size = 4) + 

    # convert to polar coordinates 
    coord_polar(theta = "y",direction=-1) 

    return(p) 
} 

set.seed(42) 
donations <- data.frame(donation_total=sample(1:1E5,50,replace=TRUE)) 
donation_size_levels_same <- seq(0,2E6,10E3) 
donations$bracket <- cut(donations$donation_total,breaks=donation_size_levels_same,right=FALSE,dig.lab = 50) 

donations.by_bracket <- donations %>% 
    group_by(bracket) %>% 
    summarize(n=n(),total=sum(donation_total)) %>% 
    ungroup() %>% 
    arrange(bracket) 

grid.arrange(
    pie_chart(df=donations.by_bracket,main="n",labels="bracket",labels_title="Total Amount Donated"), 
    pie_chart(df=donations.by_bracket,main="total",labels="bracket",labels_title="Total Amount Donated")) 

答えて

1

あなただけ(あなたがここで助けを必要と言う)1行は次のようにすることを交換する場合、ラベルの配置は、まだいくつかの調整が必要であるが、これはラベリング問題に対処するようだ:

mutate(label_pos = 1 - cumsum(perc) + perc/2, 
     inner_label_text = paste0(round(perc * 100), "%\n",as.character(df[[main]])))