Rcharts nPlot() Проценты с дискретным/мультибарчартом

Я хочу использовать функцию 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")
)
)
))

Скажем, я просто хотел посмотреть на один фактор, например Волосы. Есть ли способ построить их проценты, используя 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), чтобы он взял вектор пропорций/процентов.

Любые предложения приветствуются.


person Chris    schedule 31.10.2013    source источник
comment
Можете ли вы показать график, который вы хотите сделать, используя базу R, решетку или ggplot2? Это поможет мне рассказать вам, как это сделать с помощью nPlot.   -  person Ramnath    schedule 01.11.2013
comment
Надеялся на что-то вроде: barplot(prop.table(rowSums(HairEyeColor[,,1])), ylim=c(0,1))   -  person Chris    schedule 01.11.2013
comment
Думаю, я хотел, чтобы он складывался (в один столбец), а высота также достигала 100%. И есть возможность удалить определенные уровни, щелкнув уровень фактора вверху справа. Но когда я смотрю на discreteBarChart больше, я понимаю, что это не вариант. И доступно только в multiBarChart. Я тоже думаю, что так (с добавлением легенды, очевидно): barplot(as.matrix(prop.table(rowSums(HairEyeColor[,,1]))), ylim=c(0,1),beside=FALSE)   -  person Chris    schedule 01.11.2013


Ответы (1)


Вот как это сделать с помощью 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
person Ramnath    schedule 01.11.2013
comment
Я пробовал p1$print('inline', include_assets = F, cdn = FALSE), p1$show('inline', include_assets = F, cdn = FALSE), p1, p1$show(), p1$print(), но никто мне не подходит. rpubs.com/englianhu/Milestone-Report аналогично: 1) stackoverflow .com/questions/29029718/ 2) stackoverflow.com/questions/30212788/ - person RYO ENG Lian Hu; 26.04.2016