Я хочу использовать функцию 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)
, чтобы он взял вектор пропорций/процентов.
Любые предложения приветствуются.
barplot(prop.table(rowSums(HairEyeColor[,,1])), ylim=c(0,1))
- person Chris   schedule 01.11.2013discreteBarChart
больше, я понимаю, что это не вариант. И доступно только вmultiBarChart
. Я тоже думаю, что так (с добавлением легенды, очевидно):barplot(as.matrix(prop.table(rowSums(HairEyeColor[,,1]))), ylim=c(0,1),beside=FALSE)
- person Chris   schedule 01.11.2013