2017-03-07 38 views
0

私はいくつかのスライスを持つ円グラフを作成しようとしていますが、その多くは低い値を持っています。問題は、私がチャートを作るとき、ほとんどのラベルがお互いに重なることです。r円グラフのラベルが重複するggplot2

グラフィックはこれです:

graphic

データ:

  Descripcion Freq 
       Sumarios 17 
    Previsiones Legales 34 
      Multas SICORE 19 
      Multas ANSeS 7 
      Multas AFIP 5 
    Gastos Corresponsalía 22 
     Faltantes de Caja 470 
    Cargos Jubilaciones 2185 
      ATM Fraudes 10 
     ATM Diferencias 201 

とコード:

#armo el grafico 
pmas <- ggplot(cant_masivos_trim, aes(x=1, y=Freq, fill=Descripcion)) + 
     geom_bar(stat="identity") + 
     ggtitle(paste("Cantidad de Reportes - Carga Masiva")) 
pmas <- pmas + coord_polar(theta='y') 
pmas <- ggplot(cant_masivos_trim, aes(x=1, Freq, fill=Descripcion)) + 
     ggtitle(paste("Cantidad de Reportes - Carga Masiva")) + 
     coord_polar(theta='y') 
pmas <- pmas + geom_bar(stat="identity", color='black') + guides(fill=guide_legend 

(override.aes=list(colour=NA))) 
pmas <- pmas + theme(axis.ticks=element_blank(), # the axis ticks 
      axis.title=element_blank(), # the axis labels 
      axis.text.y=element_blank()) # the 0.75, 1.00, 1.25 labels. 
y.breaks <- cumsum(cant_masivos_trim$Freq) - cant_masivos_trim$Freq/2 
pmas <- pmas + 
    # prettiness: make the labels black 
    theme(axis.text.x=element_text(color='black')) + 
    scale_y_continuous(
     breaks=y.breaks, # where to place the labels 
     labels= (paste(cant_masivos_trim$Freq, percent(cant_masivos_trim$Freq/sum (cant_masivos_trim$Freq)), sep='\n'))) # the labels 

ノーここに解決策を見つけることを試みるが、持っています運。誰かがアイデアを持っていますか?

+0

あなたの代わりに軸ラベルのラベルやテキストを追加する場合は、[この](http://stackoverflow.com/a/33337625/2461552)の線に沿って何かを行うことができます。パッケージggrepelも参照してください。ドーナツの例がここに示されている(http://stackoverflow.com/a/38688118/2461552)。 – aosmith

答えて

1

ここでは、ggrepelを使用して試行しています。円グラフの結果は本当に美しいものではありませんが、改善することはできません。その後、私は円グラフのない別のソリューションを提供します。

library(ggplot2) 
library(tibble) 
library(scales) 
library(ggrepel) 
library(forcats) 

df <- tribble(
    ~Descripcion, ~Freq, 
    "Sumarios", 17, 
    "Previsiones Legales", 34, 
    "Multas SICORE", 19, 
    "Multas ANSeS", 7, 
    "Multas AFIP", 5, 
    "Gastos Corresponsalía", 22, 
    "Faltantes de Caja", 470, 
    "Cargos Jubilaciones", 2185, 
    "ATM Fraudes", 10, 
    "ATM Diferencias", 201) 

私が要因にdf$Descripcionを変更し、forcats::fct_reorderを使用して、df$Freqで注文しました。そして、データフレームの順序を変更するので、ラベルを配置する機能が正しく機能します。

df$Descripcion <- fct_reorder(df$Descripcion, df$Freq) 

df <- df[order(df$Freq, decreasing = TRUE), ] 
df 
# A tibble: 10 × 2 
#    Descripcion Freq 
#     <fctr> <dbl> 
# 1    Sumarios 17 
# 2 Previsiones Legales 34 
# 3   Multas SICORE 19 
# 4   Multas ANSeS  7 
# 5   Multas AFIP  5 
# 6 Gastos Corresponsalía 22 
# 7  Faltantes de Caja 470 
# 8 Cargos Jubilaciones 2185 
# 9   ATM Fraudes 10 
# 10  ATM Diferencias 201 

次に、ラベルを配置する別のデータフレームを定義します。試行錯誤してx.breaksを選んだ。

my_labels <- tibble(x.breaks = seq(1, 1.5, length.out = 10), 
        y.breaks = cumsum(df$Freq) - df$Freq/2, 
        labels = paste(df$Freq, percent(df$Freq/sum (df$Freq)), sep='\n'), 
        Descripcion = df$Descripcion) 

そして、ここでのプロット(私は今geom_label_repel()てラベルを追加すると、私はelement_blank()theme(axis.x.text)を変更したことに注意してください)

pmas <- ggplot(df, aes(x = 1, y = Freq, fill = Descripcion)) + 
    ggtitle(paste("Cantidad de Reportes - Carga Masiva")) + 
    geom_bar(stat="identity", color='black') + 
    coord_polar(theta='y') + 
    guides(fill=guide_legend(override.aes=list(colour=NA)))+ 
    theme(axis.ticks=element_blank(), # the axis ticks 
     axis.title=element_blank(), # the axis labels 
     axis.text.y=element_blank(), # the 0.75, 1.00, 1.25 labels. 
     axis.text.x = element_blank(), 
     panel.grid = element_blank()) + 
    scale_fill_brewer(palette = "Set3", direction = -1)+ 
    geom_label_repel(data = my_labels, aes(x = x.breaks, y = y.breaks, 
             label = labels, fill = Descripcion), 
        label.padding = unit(0.1, "lines"), 
        size = 2, 
        show.legend = FALSE, 
        inherit.aes = FALSE) 

pmas 

Pie Chart

は、プロットの別のバージョンでありますラベルに別のデータフレームを提供する必要はありません。私はバーの前にラベルを置くことを決めましたが、それはあなた次第です。ラベルが表示されるようにexpand_limits(y = -150)に、ラベルが読みやすくなるようにcoord_flip()に注意してください。 geom_bar(stat = "identity")の代わりにgeom_col()も使用します。

pmas2 <- ggplot(data = df, aes(x = Descripcion, y = Freq)) + 
    geom_col(aes(fill = Descripcion) , show.legend = FALSE) + 
    ggtitle(paste("Cantidad de Reportes - Carga Masiva")) + 
    coord_flip() + 
    geom_label(aes(label = paste(df$Freq, percent(df$Freq/sum(df$Freq)), sep = "\n"), 
       y = -150, fill = Descripcion), 
      show.legend = FALSE, 
      size = 3, label.padding = unit(0.1, "lines")) + 
    expand_limits(y = -150) + 
    scale_fill_brewer(palette = "Set3", direction = -1) 

pmas2 

Bar chart

関連する問題