2

nPlot()関数を使用してRCharts、頻度ではなく、個別のグループに分類される人々のパーセンテージをプロットしたいと考えています。

例: 以下の HairEyeColor データ/コードを使用すると、目の色の関数として、さまざまな髪の色 (グループ変数) を持つ人の割合を考慮することができます。

## server.r
library(rCharts)
library(shiny)
library(reshape)

HairEyeColor1 <- melt(round(prop.table(HairEyeColor[,,1],2)*100,2))
names(HairEyeColor1) <- c("Hair", "Eye", "Percent")

shinyServer(function(input, output) {
output$myChart <- renderChart({
p1 <- nPlot(Percent ~ Eye, group = "Hair", data = HairEyeColor1, type = multiBarChart")
p1$addParams(dom = 'myChart')
return(p1)
})
})

## ui.R
library(rCharts)
library(shiny)

shinyUI(pageWithSidebar(
headerPanel("rCharts: Interactive Charts from R using NVD3.js"),
sidebarPanel(
wellPanel(
    helpText(   "Look at the pretty graph"
    )
    ),
wellPanel(
    helpText(   "Look at the pretty graph"
    )
    ),
wellPanel(
    helpText(   "Look at the pretty graph"
    )
    )
),
mainPanel(
div(class='wrapper',
tags$style(".Nvd3{ height: 400px;}"),
showOutput("myChart","Nvd3")
)
)
))

たとえば、髪などの 1 つの要素だけを見たいとします。を使用してパーセンテージをプロットする方法はありnPlot()ますか?

prop.table(rowSums(HairEyeColor[,,1]))
    Black     Brown       Red       Blond 
    0.2007168 0.5125448   0.1218638 0.1648746 

type=multiBarChart私が試した:

p1 <- nPlot(Percent ~ , group = "Hair", data = HairEyeColor1, type = multiBarChart")

これは完全に失敗します。私も試しました:

p1 <- nPlot(Percent ~ 1, group = "Hair", data = HairEyeColor1, type = multiBarChart")

これにより、少なくともいくつかのグラフが Shiny UI に渡されます。しかし、これは見栄えが悪く、機能 (X/Y 軸の外観、グラフのクリック) がすべて失われます。

これは適切だと思いましnPlot(type=discreteBarChart)たが、これのデータ レイアウトでは、単一の因子変数を持つデータフレームが必要なようです。nPlot(type=discreteBarChart)したがって、プロポーション/パーセンテージのベクトルをだまして取得する方法がよくわかりません。

任意の提案をいただければ幸いです。

4

1 に答える 1

2

で行う方法は次のとおりですnPlot。結果のプロットはこちらで確認できます。デフォルトでバーを積み重ねる場合はn1$chart(stacked = TRUE)、グラフを印刷する前に線を追加します。

# prepare data
require(plyr)
dat = as.data.frame(HairEyeColor)
dat = ddply(dat, .(Hair), summarize, Freq = sum(Freq), Group = "A")

# draw chart
require(rCharts)
n1 <- nPlot(Freq ~ Group, data = dat, group = 'Hair', type = 'multiBarChart')
n1
于 2013-11-01T00:48:52.200 に答える