5

現在、R で ggplot2 を使用して積み上げ横棒グラフ チャートを使用しています。

これは私のRコードです:

ggplot(results, aes(x=Protocol, y=Time, fill=Phase)) + 
  geom_bar(stat="identity") + coord_flip()

そして、次のグラフが生成されます。 グラフの例

フェーズ 1 と 2 が左側、フェーズ 3 と 4 が右側になるように、このチャートを中央に配置します。

これが私が探しているものの大まかなアイデアです。しかし、中心線が時間 0 で、時間はいずれかの方向に正になると想像してください。 目標の例

2つのグラフを連続して作成する必要があると思いますか?

4

2 に答える 2

7

このタイプのチャートは、中心点の周りの肯定的および否定的な認識を示すリッカート型の調査データに多く使用されます

あなたがやろうとしていること 私は 2011 年初頭の投稿で「Net Stacked Distribution」と呼び、発散棒グラフとも呼ばれています。両方の方法で参照されていることがわかります。ウィラード ブリントンは、1939 年の著書「グラフィック プレゼンテーション」で使用しました。そこにはかなりたくさんあります。

Tableau のコードを含む私の例と説明: http://www.organizationview.com/net-stacked-distribution-a-better-way-to-visualize-likert-data

Naomi Robbins はそれについて論文を書いています: http://www.amstat.org/membersonly/proceedings/2011/papers/300784_64164.pdf

いくつかの R の例:

Jason Bryer による Likert パッケージと対応するサイトがあります: http://jason.bryer.org/likert/

HH パッケージはそれをラティスで実装します

Cross Validated に関する非常に良い説明: https://stats.stackexchange.com/questions/25109/visualizing-likert-responses-using-r-or-spss

ジェイソン・ベッカー: http://blog.jsonbecker.com/2012/07/ranked-likert-scale-visualization.html

イーサン・ブラウン: http://statisfactions.com/2012/improved-net-stacked-distribution-graphs-via-ggplot2-trickery/

Daniel Luedecke: http://strengejacke.wordpress.com/2013/07/17/plotting-likert-scales-net-stacked-distributions-with-ggplot-rstats/

これらのチャートに関する最大の論争は、ニュートラルな値をどうするかということです。Naomi は、中心軸の両側で分割することを推奨しています。ニュートラル値は正でも負でもないため、事実上ゼロとして扱い、グラフに表示しないようにする必要があると主張しました (セカンダリ グラフまたはグラフの適用外の値と共にプロットできます)。

私はこれらのチャートでいくつかのユーザビリティ テストを行いましたが、他の多くの値よりも優れたパフォーマンスを発揮しますが、正味の数値 (ネット プロモーター スコアの計算方法と同様に、ポジティブな感情 - ネガティブな感情) のような単純なものが好まれているようです。

于 2013-10-22T12:36:15.757 に答える
2

これが私が意味することです:

library(scales)
dat <- read.csv("~/Downloads/bench.csv",stringsAsFactors = TRUE)
dat$Time1 <- ifelse(dat$Phase %in% c('Decode','Deserialize'),-dat$Time,dat$Time)

up <- dat[dat$Time1 >= 0,]
down <- dat[dat$Time1 < 0,]

commapos <- function(x, ...) {
    format(abs(x), big.mark = ",", trim = TRUE,
           scientific = FALSE, ...)
}

ggplot() + 
    geom_bar(data = up,aes(x = Protocol,y = Time1,fill = as.integer(Phase)),stat = "identity") + 
    geom_bar(data = down,aes(x = Protocol,y = Time1,fill = as.integer(Phase)),stat = "identity") + 
    scale_y_continuous(labels = commapos) +
    coord_flip()

commapos私が実際に同様のことをしたときに、自分の既存のコードから取得したばかりのフォーマッターです。正確な書式設定は必要ないかもしれませんが、これabs(x)が重要な部分です。

また、 Phase 変数は文字/因子であったため、元のカラーバーを取得するには、整数に強制的に戻さなければならなかったことに注意してください。

そして、前述したように、ゼロ未満の値を使用すると、ggplot はスタックが適切に定義されていないと文句を言います。データ フレームを正/負の値に分けずにこれを試すと、その理由がわかります。

于 2013-10-21T23:00:01.317 に答える