如何tags$...在ggvis交互式图形中使用这些功能?
一个"小"和人为的例子:
library(ggvis)
library(shiny)
n <- 20
data <- data.frame(
xs = 1:n, ys = rnorm(n),
color = sample(c('red', 'green', 'blue'), n, replace = TRUE),
size = 25 * sample(6, n, replace = TRUE),
rownum = 1:n)
ttFunc1 <- function(x) {
paste('<table>',
paste(apply(data.frame(n = names(data),
x = unlist(format(data[x$rownum,]))), 1,
function(h) paste('<tr><td>', h[1],
'</td><td>', h[2],
'</td></tr>')),
collapse = ''),
'</table>')
}
ttFunc2 <- function(x) {
tags$table(
lapply(1:ncol(data),
function(cc) {
tags$tr(tags$td(names(data)[cc]),
tags$td(format(data[x$rownum,cc])))
}))
}
shinyApp(
ui = fluidPage(
uiOutput('gg_ui'),
ggvisOutput('gg') …Run Code Online (Sandbox Code Playgroud) 要用ggvis包装在R中绘制以下内容,

代码是
mtcars %>%
ggvis(~wt, ~mpg, fill = ~factor(cyl)) %>%
layer_points() %>%
group_by(cyl) %>%
layer_model_predictions(model = "lm")
Run Code Online (Sandbox Code Playgroud)
如果我在上面更改了fillto shape,则会出现错误:
Error: Unknown properties: shape.
Did you mean: stroke?
Run Code Online (Sandbox Code Playgroud)
为什么?如何达到预期的效果?
将ggvis图形导出为PNG文件(包含在.Rmd文档中).
我基本上对Node.js一无所知,除了它很棒,我应该知道更多.
我得到:
library(ggvis)
mtcars %>% ggvis(~mpg, ~wt) %>% export_png()
Writing to file plot.png
Guessing layer_points()
module.js:340
throw err;
^
Error: Cannot find module 'd3'
at Function.Module._resolveFilename (module.js:338:15)
at Function.Module._load (module.js:280:25)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at Object.<anonymous> (/usr/local/src/vega/index.js:11:6)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:364:17)
Run Code Online (Sandbox Code Playgroud)
devtools::install_github("hadley/ggvis")安装ggvis(0.3.0.9001)和依赖项https://github.com/trifacta/vega到/usr/local/src/vega./bin/vg2png -> /usr/local/src/vega/bin/vg2pngsessionInfo() …Run Code Online (Sandbox Code Playgroud) 我想知道是否有人能够使用动态ggvis图来处理knitr文档.当我制作我的情节并且使用后交互式工具提示不起作用时,我收到以下警告knitr.
警告:无法在knitr文档中输出动态/交互式ggvis图.生成绘图的静态(非动态,非交互)版本.
df %>%
ungroup() %>%
ggvis(~Week,~Rank, stroke = ~Team) %>%
layer_points(size := 40, size.hover := 200, fill = ~Team, key:=~id) %>%
layer_lines(stroke.hover = ~Team, strokeWidth.hover := 8, strokeWidth := 1) %>%
add_axis("x", title="Week", subdivide = 0, values = seq(1, 17, by = 1), format="####") %>%
add_axis("y", title="Rank", subdivide = 0, values = seq(1, 10, by = 1), format='####') %>%
scale_numeric("y", reverse=TRUE) %>%
add_tooltip(all_values, "hover")
Run Code Online (Sandbox Code Playgroud)
编织.Rmd文件后,一切正常,除了add_tooltip()
我正在研究用ggvis构建一个闪亮的应用程序.为此,我使用了一个名为"company"的小数据集.它包含每行代表和员工的员工数据.
从ggvis的角度来看,我正在尝试以下方法:创建一个条形图,显示以下变量的分布:
而不是使用以下代码创建三个不同的条形图:
#Barcharts - Role
company %>% ggvis(~Role,opacity := 0.8, fill:= "firebrick") %>%
layer_bars() %>%
scale_ordinal('x', domain=c('Analyst','Consultant','Software Engineer','Manager','Director'))
#Barcharts - Age
company %>% ggvis(~Age,opacity := 0.8, fill:= "firebrick") %>%
layer_bars()
#Barcharts - Sex
company %>% ggvis(~Sex,opacity := 0.8, fill:= "firebrick") %>%
layer_bars()
Run Code Online (Sandbox Code Playgroud)
我想创建一个允许输入选择器的ggvis条形图.
我试过以下代码:
company %>% ggvis(input_select(c("Sex","Role","Age"), map = as.name)) %>% layer_bars()
Run Code Online (Sandbox Code Playgroud)
返回以下错误:
Error: Visual property x.update is not a variable
Run Code Online (Sandbox Code Playgroud)
使用的数据是:
raw <- "Age Sex Role
35 M Director
37 M Director
30 M Manager …Run Code Online (Sandbox Code Playgroud) ggvis用户创建的,用户可以从中选择学生姓名inputSelect.在图中,我想要更改特定分数范围内的背景颜色.例如,在每个图中,分数高于80或低于50的绘图背景颜色用蓝色突出显示(参见附图).我试图添加图层并使用绘制矩形到情节layer_rects(),但问题是如果选择不同的学生,x轴的值会改变.任何人之前做过这个或任何想法?如果我只想要那个得分范围内的积分弹出,是否有可能?非常感谢!
library(shiny)
library(ggvis)
df <- data.frame(Student = c("a","a","a","a","a","b","b","b","b","b","c","c","c","c"),
year = c(seq(2001,2005,1),seq(2010,2014,1),seq(2012,2015,1)),
score = runif(14,min = 50,max = 100), stringsAsFactors=F)
ui = (fluidPage(
sidebarLayout(
sidebarPanel(
selectInput("stu","Choose Student",
choice = unique(df$Student))
),
mainPanel(ggvisOutput("plot"))
)
)
)
server = function(input,output,session){
dataInput = reactive({
gg = df[which(df$Student == input$stu),]
})
vis = reactive({
data = dataInput()
data %>%
ggvis(x = ~year, y = ~score) %>%
scale_numeric("y",domain = c(40,120))%>%
layer_lines()
})
vis %>% bind_shiny("plot")
}
runApp(list(ui = …Run Code Online (Sandbox Code Playgroud) y1 = c(1,2,3,4)
y2 = c(6,5,4,3)
x = c(1,2,3,4)
df = data.frame(x,y1,y2)
Run Code Online (Sandbox Code Playgroud)
我想将以下两个图组合成一个,使用ggvis:
df %>% ggvis(~x,~y1) %>% layer_paths()
df %>% ggvis(~x,~y2) %>% layer_paths()
Run Code Online (Sandbox Code Playgroud)
但是,以下不起作用:
df %>% ggvis(~x,~y1) %>% layer_paths() %>% ggvis(~x,~y2) %>% layer_paths()
Run Code Online (Sandbox Code Playgroud) 我正在从Excel迁移到ggvis进行数据分析.对于具有两个变量的典型分组条形图,但是我难以并排绘制 条形图而不是堆叠.
以下数据具有四个步骤A,B,C,D,其具有来自两个特征cc,ca的"比率"数据.我的尝试是并排绘制cc和ca特征的比率.但是,默认情节是将两个数据叠加在一起.检查ggvis vignetts有一个选项来设置stack = FALSE.但它会与其他功能重叠.
ggvis中是否有选项可以在ggplot中执行"geom_bar(position ="dodge")"等操作?
library(ggvis)
steps <-c("A","B","C","D","A","B","C","D")
ratio <-c(1.1,1.5,1.7,1.4,1.5,1.7,1.4,1.9)
feature <-c("cc","cc","cc","cc","ca","ca","ca","ca")
shrink <- data.frame(steps,ratio,feature)
shrink %>% ggvis(x= ~steps, y= ~ratio, fill = ~feature) %>% layer_bars()
Run Code Online (Sandbox Code Playgroud) 有没有办法让ggplot2的geom_density()函数模仿ggvis的行为layer_densities()?也就是说,在没有调用的情况下使它p1看起来如此p3(见下文)xlim()?具体来说,我更喜欢使密度曲线的尾部平滑的视图.
library(ggvis)
library(ggplot2)
faithful %>%
ggvis(~waiting) %>%
layer_densities(fill := "green") -> p1
ggplot(faithful, aes(x = waiting)) +
geom_density(fill = "green", alpha = 0.2) -> p2
ggplot(faithful, aes(x = waiting)) +
geom_density(fill = "green", alpha = 0.2) +
xlim(c(30, 110)) -> p3
p1
p2
p3
Run Code Online (Sandbox Code Playgroud)
ggvis输出:

ggplot2"默认":

ggplot2"需要":

注意:可以通过以下(使用trim=TRUE)制作ggvis mimic ggplot2 ,但我想转向另一个方向......
faithful %>%
compute_density(~waiting, trim=TRUE) %>%
ggvis(~pred_, ~resp_) %>%
layer_lines()
Run Code Online (Sandbox Code Playgroud) 我已经搜索过了,如果我遗失了什么,请原谅我.
我们假设一个数据框包含名称,日期,卡路里,其中卡路里是当天消费的卡路里总数.
Name Date Calories
Amy 1/1/01 1500
Amy 1/2/01 1600
Amy ... ...
Sue 1/1/01 1450
Sue 1/1/02 1500
Sue ... ...
Jim ... ...
Run Code Online (Sandbox Code Playgroud)
我想做的是使用ggvis绘制每个人的卡路里(姓名).我知道我可以使用dplyr的group_by,并在单个情节中得到这个,但那太忙了.而且我知道我可以使用dplyr的过滤器并过滤掉每个人并为每个人制作一个图表,但这不会扩展.
有没有办法让ggvis自动为每个人吐出每天卡路里的情节?
请注意,我尝试创建如下所示的函数:
makeCharts <- function(myName){
myTbl %>% filter(Name == myName) %>% ggvis(~Date, ~Calories)
}
Run Code Online (Sandbox Code Playgroud)
手动调用它时效果很好:
makeCharts("Amy")
Run Code Online (Sandbox Code Playgroud)
但是当你通过sapply调用它时:
sapply(levels(myTbl$Name), makeCharts)
Run Code Online (Sandbox Code Playgroud)
输出如下所示:
Amy Sue Jim John Sally Frank Sandy etc...
marks List,0 List,0 List,0 List,0 List,0 List,0 List,0 List,0 List,0 List,0 List,0 List,0 List,0 List,0 List,0
data List,1 List,1 List,1 List,1 List,1 List,1 List,1 List,1 …Run Code Online (Sandbox Code Playgroud)