2017-12-09 3 views
1

私は、さまざまなグループの四分位で収入手段のための多数の(縦の)棒グラフを生成するためにaa関数を作成しようとしています。四分位の列には、データフレーム内の列名を使用して個別に名前を付ける必要があります。ggplot2:連続データ用の縦列の棒グラフ

これは私のテストデータを作る:

quart_nms <- c("1st", "2nd", "3rd", "4th") 
tile_nms <- function(vec, nms){ 
    if (length(vec) != length(nms)) stop(
    "length vec ", length(vec), " must equal length nms ", length(nms)) 
    out <- data.frame(t(unlist(vec))) 
    colnames(out)<- nms 
    out 
} 
t1 <- tile_nms(1:4, quart_nms) 

これは私の関数です。私は、ggplot2がこのタイプのチャートではワイドフォーマットでデータを求めていると思っていますが、変数のリストを正しく渡していないと思います。彼らはy値ではないでしょうか?

bar_plot <- function(.dt, .tit="U.S. Personal Income Distribution by Quartile", 
        .sub = NULL, .xl = "Income Quartiles", .yl = "Mean Income", 
        ...){ 
    ggplot(data =.dt) + 
    geom_col(mapping = aes(y = list(1st, 2nd, 3rd, 4th)), stat = identity) + 
    labs(title = .tit, subtitle = .sub) 
} 

gr1 <- bar_plot(.dt = t1, .sub = "pop subgroup name") 

答えて

1

なぜggplot2がワイドフォーマットのデータを必要としているのかよくわかりません。それは事実ではありません。長い書式に変換してプロット関数を少し変更するだけでうまくいきます。

これは、あなたのコードから変更されていません:

quart_nms <- c("1st", "2nd", "3rd", "4th") 
tile_nms <- function(vec, nms){ 
    if (length(vec) != length(nms)) stop(
    "length vec ", length(vec), " must equal length nms ", length(nms)) 
    out <- data.frame(t(unlist(vec))) 
    colnames(out)<- nms 
    out 
} 
t1 <- tile_nms(1:4, quart_nms) 

どのような次はあなたのものに基づいて、私のコードです:

# needed libraries 
library(tidyr) 
library(ggplot2) 

# convert to long format 
tlong <- gather(t1, quartile, value) 
tlong$quartile <- factor(tlong$quartile, levels = quart_nms) # make factor and put levels in the right order 

# plotting function 
bar_plot <- function(.dt, .tit="U.S. Personal Income Distribution by Quartile", 
        .sub = NULL, .xl = "Income Quartiles", .yl = "Mean Income", 
        ...){ 
    ggplot(data =.dt) + 
    geom_col(mapping = aes(x = quartile, y = value)) + 
    labs(title = .tit, subtitle = .sub, x = .xl, y = .yl) 
} 

# call plotting function with long-format data 
bar_plot(.dt = tlong, .sub = "pop subgroup name") 

enter image description here

+0

おかげでサンタクロース!それは壮観です。私は、連続変数の棒グラフにワイドフォーマットが必要だと言ったいくつかの例があると思っていました。おそらくggplot2の非常に古いバージョンで本当ですか?あるいは私はそれらを夢見ていたかもしれません。 – andrewH

関連する問題