闪亮+ ggplot:如何子集无效数据对象? [英] Shiny + ggplot: How to subset reactive data object?
问题描述
我制作了一个闪亮的应用程序,它在用户选择了他感兴趣的日期范围(= x轴的范围)后向用户显示ggplot。所以我想我需要定义一个反应数据对象(正确?)。
ggplot有一些子集。 R告诉我,被动数据对象不可用于子集。在我对ggplot的新手理解中,子集必须在geom_bar(),geom_line()语句内部完成,以便获得我想要的图。
- 任何人都可以向我推荐如何继续使用子集?
-
以及如何引用图表的颜色生成因子类别?
Thanks!
样本数据
A = c (3,4,3,5)
B = c(2,2,1,4)
Z = c(1,2,1,2)
R = c( - 2,-1,-3,0)
S = c(7,7,7,9)
mydata = data.frame(cbind(A,B,Z,R,S))
dates = c(2014-01-01,2014-02-01,2014-03-01,2014-04-01)
mydata $ date = as.Date (日期)
mydata.m = melt(mydata,id =date)
names(mydata.m)= c(variable,category,value)
闪亮的服务器:根据用户输入选择观测值(日期范围输入)
< pre $ lt; code> data.r = reactive({
a = subset(mydata.m,%in%input $ daterange)
return(a)
} )
闪亮的服务器:制作图
<$ $(
$ g $ p
$ b $ g $ p $ b $ g $ p $ $ $ $ $ $ $ $ $ $ = ggplot(data.r(),aes(x = variable,fill = category))+
分类栏A,B,Z:数据......但如何?
+ geom_bar(数据=子集(data.r(),%c(A,B)中的类别%),aes(y = value),stat =identity,position =stack )
+ geom_bar(subset =。(category ==Z),aes(y = -value),stat =identity)
#用于类别R,S :一样。
+ geom_line(subset =。(category ==R),aes(y = value))
+ geom_line(subset =。(category ==S),aes(y = value ))
#如何引用因子<< category>>在反应函数中<< data.r()>> ;?
+ scale_fill_manual(breaks = levels(category),values = mycolorgenerator(length(levels(category))))
print(s)
})
UI.R
#输入零件
库(闪亮)
shinyUI(pageWithSidebar(
# title
headerPanel(My App),
sidebarPanel(
dateRangeInput(daterange,Date range:,
start = 2014-01-01,
end =2014-04-01,
min =2014-01-01,
max =2014-04-01,
format =dd / mm / yyyy,
separator = - ),
submitButton(text =Update!)
),
#-----------------------------------------------
#输出零件
mainPanel(
tabsetPanel(
tabPanel(Tab 1,h4(Head 1),plotOutput(myplot ))
)
)
))
SERVER.R
library(reshape)
library(shiny)
library ggplot2)
#GEN DATA ----------------------------- ------------------
A = c(3,4,3,5)
B = c(2,2, 1,4)
Z = c(1,2,1,2)
R = c(-2,-1,-3,0)
S = c(7,7 ,7,9)
mydata = data.frame(cbind(A,B,Z,R,S))
dates = c(2014-01-01,2014-02-01 ,2014-03-01,2014-04-01)
mydata $ date = as.Date(dates)
mydata.m = melt(mydata,id =date)
名称(mydata.m)= c(变量,类别,值)
#服务器----------------------------------------- ------
shinyServer(function(input,output){
#DATA
data.r = reactive({
a = subset(mydata.m,%in%input $ daterange)
return(a)
})
#GGPLOT
mycolorgenerator = colorRampPalette(c('sienna','浅灰色'))
输出$ myplot = renderPlot({
#ggplot,适当参考反应函数<< data.r()>>
s = ggplot(data.r(),aes(x = variable,fill = category))+
类别A,B,Z的条形码:需要对数据进行子集化...但是如何?
geom_bar(data = data.r(),%c(A,B)中的类别%),aes(y = value),stat =identity,position =stack )+
geom_bar(subset =。(category ==Z),aes(y = -value),stat =identity)+
#用于类别R,S :一样。
geom_line(subset =。(category ==R),aes(y = value))+
geom_line(subset =。(category ==S),aes(y = value) )+
#如何引用因子<< category>>在反应函数中<< data.r()>> ;?
scale_fill_manual(breaks = levels(category),values = mycolorgenerator(length(levels(category))))
print(s)
})
))
server.R和ui.R真的有帮助)
我不知道你从哪里得到。()
函数或 geom_bar
具有 subset =
参数的想法。但是这里有一个更新后的 renderPlot
,它至少没有产生任何错误
output $ myplot = renderPlot({
dd< -data.r()
#ggplot with proper reference to reactive function<< data.r()>> ;
s = ggplot(dd,aes(x = variable,fill = category))+
类别A,B,Z的#个条形码:需要对数据进行子集化......但是如何?
geom_bar(data = subset(dd,category%in%c(A,B)),aes(y = value),
stat =identity,position =stack )+
geom_bar(data = subset(dd,category ==Z),aes(y = -value),stat =identity)+
#用于类别R ,S:same。
geom_line(data = subset(dd,category ==R),aes(y = value))+
geom_line(data = subset(dd,category ==S ),aes(y = value))+
scale_fill_manual(breaks = levels(dd $ category),
values = mycolorgenerator(length(levels(dd $ category))))
print(s)
})
大多数情况下,我将 data =
更改为显式 subset()
调用
I am making a shiny app, that shows the user a ggplot after he selects the daterange he is interested in (= the range for the x-axis). So I guess I need to define a reactive data object (correct?).
The ggplot has some subsetting in it. R tells me that reactive data object is not subsettable. In my rookie understanding of ggplot, the subsetting has to be done inside the geom_bar(), geom_line() statements in order to obtain the graph that I want.
- Can anyone suggest me how to proceed with the subsetting?
And how to reference the factor category in generating colors for the graph? Thanks!
sample data
A = c(3, 4, 3, 5) B = c(2, 2, 1, 4) Z = c(1, 2, 1, 2) R = c(-2, -1, -3, 0) S = c(7,7,7,9) mydata = data.frame(cbind(A,B,Z,R,S)) dates = c("2014-01-01","2014-02-01","2014-03-01","2014-04-01") mydata$date = as.Date(dates) mydata.m = melt(mydata,id="date") names(mydata.m) = c("variable", "category","value")
shiny server: select observations as per user input (dateRangeInput)
data.r = reactive({ a = subset(mydata.m, variable %in% input$daterange) return(a) })
shiny server: make the plot
output$myplot = renderPlot({ # ggplot with proper reference to reactive function <<data.r()>> s = ggplot(data.r(), aes(x=variable, fill=category)) + # bars for categories A, B, Z: needs subsetting the data... but how? + geom_bar(data=subset(data.r(), category %in% c("A","B")), aes(y=value), stat="identity", position="stack") + geom_bar(subset=.(category=="Z"), aes(y=-value), stat="identity") # lines for categories R, S: same. + geom_line(subset=.(category=="R"), aes(y=value)) + geom_line(subset=.(category=="S"), aes(y=value)) # how to reference the factor <<category>> in reactive function <<data.r()>>? + scale_fill_manual(breaks = levels(category), values = mycolorgenerator(length(levels(category)))) print(s) })
UI.R
# INPUT PART
library(shiny)
shinyUI(pageWithSidebar(
# Application title
headerPanel("My App"),
sidebarPanel(
dateRangeInput("daterange", "Date range:",
start = "2014-01-01",
end = "2014-04-01",
min = "2014-01-01",
max = "2014-04-01",
format = "dd/mm/yyyy",
separator = "-"),
submitButton(text="Update!")
),
# -----------------------------------------------
# OUTPUT PART
mainPanel(
tabsetPanel(
tabPanel("Tab 1", h4("Head 1"),plotOutput("myplot"))
)
)
))
SERVER.R
library(reshape)
library(shiny)
library(ggplot2)
# GEN DATA -----------------------------------------------
A = c(3, 4, 3, 5)
B = c(2, 2, 1, 4)
Z = c(1, 2, 1, 2)
R = c(-2, -1, -3, 0)
S = c(7,7,7,9)
mydata = data.frame(cbind(A,B,Z,R,S))
dates = c("2014-01-01","2014-02-01","2014-03-01","2014-04-01")
mydata$date = as.Date(dates)
mydata.m = melt(mydata,id="date")
names(mydata.m) = c("variable", "category","value")
# SERVER -----------------------------------------------
shinyServer(function (input, output) {
# DATA
data.r = reactive({
a = subset(mydata.m, variable %in% input$daterange)
return(a)
})
# GGPLOT
mycolorgenerator = colorRampPalette(c('sienna','light grey'))
output$myplot = renderPlot({
# ggplot with proper reference to reactive function <<data.r()>>
s = ggplot(data.r(), aes(x=variable, fill=category)) +
# bars for categories A, B, Z: needs subsetting the data... but how?
geom_bar(data=subset(data.r(), category %in% c("A","B")), aes(y=value), stat="identity", position="stack") +
geom_bar(subset=.(category=="Z"), aes(y=-value), stat="identity") +
# lines for categories R, S: same.
geom_line(subset=.(category=="R"), aes(y=value)) +
geom_line(subset=.(category=="S"), aes(y=value)) +
# how to reference the factor <<category>> in reactive function <<data.r()>>?
scale_fill_manual(breaks = levels(category), values = mycolorgenerator(length(levels(category))))
print(s)
})
})
(The complete server.R and ui.R really helped)
I'm not sure where you got the .()
function from or the idea that geom_bar
has a subset=
parameter. But here's an updated renderPlot
that doesn't seem to generate any errors at least
output$myplot = renderPlot({
dd<-data.r()
# ggplot with proper reference to reactive function <<data.r()>>
s = ggplot(dd, aes(x=variable, fill=category)) +
# bars for categories A, B, Z: needs subsetting the data... but how?
geom_bar(data=subset(dd, category %in% c("A","B")), aes(y=value),
stat="identity", position="stack") +
geom_bar(data=subset(dd, category=="Z"), aes(y=-value), stat="identity") +
# lines for categories R, S: same.
geom_line(data=subset(dd, category=="R"), aes(y=value)) +
geom_line(data=subset(dd, category=="S"), aes(y=value)) +
scale_fill_manual(breaks = levels(dd$category),
values = mycolorgenerator(length(levels(dd$category))))
print(s)
})
Mostly I changed the data=
to explicit subset()
calls
这篇关于闪亮+ ggplot:如何子集无效数据对象?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!