是否有可能有两个ggplot2的图例,但基于不同的数据集?例如,在下面的代码中,我想在同一图形中同时获得第一种情况的图例和第二种情况的图例.我的尝试(第三种情况)不起作用.
library(ggplot2)
library(scales)
yrng <- range(economics$unemploy)
xrng <- range(economics$date)
presidential <- presidential[-(1:3), ]
# add a fictive factor to the economics dataset
economics <- cbind.data.frame(economics, col=gl(2, nrow(economics)/2))
#####################
## first situation ##
#####################
# first plot with legend
unemp <- qplot(date, unemploy, data=economics, geom="line",
xlab = "", ylab = "No. unemployed (1000s)", colour=col)
# second plot without legend
unemp + geom_vline(aes(xintercept = start), data = presidential)
######################
## second situation ##
######################
# first plot without legend
unemp <- qplot(date, …Run Code Online (Sandbox Code Playgroud) 我有这样一个清单:
> lSlopes
$A
Estimate 2.5 % 97.5 %
1 2.12 -0.56 4.80
$B
Estimate 2.5 % 97.5 %
1 2.21 -0.68 5.10
$C
Estimate 2.5 % 97.5 %
1 2.22 -2.21 6.65
Run Code Online (Sandbox Code Playgroud)
它有三个元素,但其长度可以改变(根据此处未显示的数据).我想在一个块中显示每个元素.
我的第一个想法是knit_child()在每一步编写一个包含循环调用的块,但我不知道如何获得正确的渲染knit_child().
我发现以下解决方案效果很好,但需要两个Rmd文件; 第一个调用第二个,第二个递归调用自身:
mainfile.Rmd:
```{r, echo=FALSE}
J <- length(lSlopes)
i <- 1
```
```{r child, child="stepfile.Rmd"}
```
Nice!
Run Code Online (Sandbox Code Playgroud)
stepfile.Rmd:
```{r, echo=FALSE}
lSlopes[[i]]
i <- i+1
```
```{r child, child="stepfile.Rmd", eval= i <= J}
```
Run Code Online (Sandbox Code Playgroud)
这准确地生成了我想要的渲染:
我喜欢这个棘手的解决方案,但我想知道是否存在非递归解决方案?
有了Rmarkdown,我们怎么能并排获得两个块输出?
我天真地试过这个不起作用:
<div class="container-fluid">
<div class="row-fluid">
<div class="span4">
```{r one, eval=TRUE, echo=FALSE}
......
......
```
</div>
<div class="span4">
```{r two, eval=TRUE, echo=FALSE}
......
......
```
</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
实际上,更准确地说,我想并排产生两个数字.我知道只有一个数字mfrow()用于经典情节或grid.arrange()ggplots,这是可能的,但我想包括两个html图例,每个图下面一个.
注意:我对HTML很无知.
如何用plotly包得到虚线趋势线?根据文档,应该是:
dat <- iris[,2:3]
colnames(dat) <- c("x","y")
p <- plot_ly(dat, x = x, y = y, type="scatter", mode="markers", name="data")
add_trace(p, x = x, y = fitted(lm(y~x, data=dat)), line = list(dash="dashed"), name="regression line")
Run Code Online (Sandbox Code Playgroud)
但趋势线是稳固的。
我了解如何自定义散点图中的悬停文本plotly,但是框图不接受"text"属性.Warning message: 'box' objects don't have these attributes: 'text'.我有超过300个x轴变量,并且在两组(A或B)中有编号样本(1-50),我想在同一个框图中一起绘制,然后我想区分样本数和将光标移到异常值上时,通过悬停文本进行分组.我想要自定义数据标签而不是自动四分位标签.这可能与plotly箱形图有关吗?
library(plotly)
library(magrittr)
plot_ly(melt.s.data,
x = ~variable,
y = ~value,
type = 'box',
text = ~paste("Sample number: ", Sample_number,
'<br>Group:', Group)) %>%
layout(title = "Individual distributions at each x")
Run Code Online (Sandbox Code Playgroud)
这里有一些示例数据只显示了5个变量(但是当推断到我的300时,代码应该工作)...
#sample data
set.seed(456)
#Group A
sample.data_a <- data.frame(Class = "red", Group = "A",
Sample_number = seq(1,50,by=1),
x1= rnorm(50,mean=0, sd=.5),
x2= rnorm(50,mean=0.5, sd=1.5),
x3= rnorm(50,mean=5, sd=.1),
x4= rnorm(50,mean=0, sd=3.5),
x5= rnorm(50,mean=-6, sd=.005))
#Group B
sample.data_b <- data.frame(Class …Run Code Online (Sandbox Code Playgroud) 我用Haskell OpenGL绘制了Barth sextic并且存在问题.我也用R(用包rgl和misc3d)绘制它,没有问题.这两种算法(在Haskell和R中)非常相似.Barth sextic是一个隐式曲面,在Haskell中我使用行进立方体算法计算这个曲面的三角剖分,我通过将其中一个转换misc3d为Haskell和C.我使用顶点法线,每个由隐式渐变定义方程.
这是问题所在:
我不想要这些黑色阴影.当我看到sextic的背面,通过180°旋转,没有这样的阴影:
这个Github仓库中提供了完整的代码.以下是与颜色相关的代码部分:
fuchsia :: Color4 GLfloat
fuchsia = Color4 1.00 0.00 1.00 1
discord :: Color4 GLfloat
discord = Color4 0.21 0.22 0.25 1
renderPrimitive Triangles $ mapM_ drawTriangle triangles
swapBuffers
where
drawTriangle ((v1,v2,v3), (n1,n2,n3)) = do
materialDiffuse FrontAndBack $= fuchsia
normal n1
vertex v1
normal n2
vertex v2
normal n3
vertex v3
clearColor $= discord
materialAmbient FrontAndBack $= black
materialDiffuse FrontAndBack $= white
materialEmission FrontAndBack $= black …Run Code Online (Sandbox Code Playgroud) 我想将jquery UI与shiny(不使用shinyjqui库)一起使用。当我有一个图层并尝试使用 jqueryUI 移动它时,它工作得很好,但是当使用 insertUI 动态生成该图层时,它就不起作用了。
\n\n这是代码:
\n\nlibrary(shiny)\n\nui <- fluidPage(theme = "style.css",\n tags$script(src = "jquery-ui.js"),\n tags$script(src = "script2.js"),\n actionButton("add","Add layer"),\n div(class="aux"),\n div(id="works",style="width:300px;height:200px;background:red"))\n\n\n\nserver <- function(input, output, session) {\n\n observeEvent(input$add,{\n insertUI(\n selector = ".aux",\n where="afterEnd",\n ui = div(id=paste0("new",input$add),style="width:300px;height:200px;background:blue")\n\n )\n\n\n })\n\n\n\n\n\n\n}\nshinyApp(ui, server)\nRun Code Online (Sandbox Code Playgroud)\n\n以及js脚本
\n\n $( function() {\n\n\n $("#works").draggable();\n $("#new1").draggable();\n\n\n });\nRun Code Online (Sandbox Code Playgroud)\n\n谢谢!
\n我的矩阵points(120 x 2) 有 120 个向量。我计算了它们的平方范数:
norms2 <- apply(points, 1L, crossprod)
Run Code Online (Sandbox Code Playgroud)
我将这些平方范数制成表格:
> table(norms2)
norms2
0.410691055416468 1.62481505182984 2.37518494817016 3.58930894458353
30 30 30 30
Run Code Online (Sandbox Code Playgroud)
我们可以看到范数平方有四个可能的值,每个值有 30 个向量。
我提取具有最小平方范数的向量:
> points[norms2 == min(norms2), ]
[,1] [,2]
[1,] 0.06698726 -0.6373412
[2,] 0.06698726 0.6373412
[3,] -0.06698726 -0.6373412
[4,] -0.06698726 0.6373412
Run Code Online (Sandbox Code Playgroud)
为什么我只得到 4 个向量,而不是 30 个?
如果我用近似等式进行提取,我会得到 30 个向量:
> dim(points[abs(norms2 - min(norms2)) < 0.001, ])
[1] 30 2
Run Code Online (Sandbox Code Playgroud)
那么解释是什么呢?是否对table值进行四舍五入?
这是我的 noUiSlider 的样子:
我想将刻度标签格式化为:1000 -> 1K、900000 -> 900K、5000000 -> 5M 等;即用适当的 SI 符号缩写数字。
library(shiny)
library(shinyWidgets)
ui <- fluidPage(
tags$br(),
noUiSliderInput(
inputId = "noui",
label = "Slider vertical:",
value = 50,
orientation = "vertical",
range = list("min" = list(0),
"25%" = list(1000, 500),
"50%" = list(10000, 50000),
"75%" = list(4000000, 500000),
"max" = list(10000000)),
pips = list(
mode = "values",
values = list(0, 500, 1000, 900000, 5000000, 10000000),
density = 4
),
format = wNumbFormat(decimals = 0),
width = "300px", height …Run Code Online (Sandbox Code Playgroud) 例如,给定一个算术表达式,x + y*z我想将其转换为add(x, multiply(y, z)).
> getAST <- function(ee) purrr::map_if(as.list(ee), is.call, getAST)
> getAST(quote(x + y*z))
[[1]]
`+`
[[2]]
x
[[3]]
[[3]][[1]]
`*`
[[3]][[2]]
y
[[3]][[3]]
z
Run Code Online (Sandbox Code Playgroud)
可以使用它rapply(result, as.character, how = "list")来获取字符而不是符号。
如何从这个 AST 中得到add(x, multiply(y, z))(结果)?当有一些括号时,这会变得更加复杂:
> getAST(quote((x + y) * z))
[[1]]
`*`
[[2]]
[[2]][[1]]
`(`
[[2]][[2]]
[[2]][[2]][[1]]
`+`
[[2]][[2]][[2]]
x
[[2]][[2]][[3]]
y
[[3]]
z
Run Code Online (Sandbox Code Playgroud)
我不要求答案必须使用该getAST功能。这只是一种可行的方法。
当然,在我的实际用例中,表达式更长。
这是没有括号时的情况的解决方案(我认为):
getAST <- function(ee) purrr::map_if(as.list(ee), is.call, getAST)
ast …Run Code Online (Sandbox Code Playgroud) r ×9
javascript ×2
knitr ×2
plotly ×2
r-markdown ×2
shiny ×2
ggplot2 ×1
haskell ×1
jquery-ui ×1
nouislider ×1
opengl ×1
r-plotly ×1
rstudio ×1
shinywidgets ×1