- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个 Shiny 的应用程序,其中用户有两个 slider 输入 - 一个用于“倍数更改”,另一个用于“p 值”。有一个数据集包含 10 个观测值,每个观测值都发生倍数变化和 p 值。在给定时间仅绘制 p 值小于“p 值” slider 输入且倍数变化大于“倍数变化” slider 输入的点。
我到目前为止所写的内容如下 -
library(ggplot2)
library(plotly)
library(htmlwidgets)
ui <- shinyUI(fluidPage(
sliderInput("threshP", "P-value:", min = 0, max = 1, value=0.05, step=0.05),
sliderInput("threshFC", "Fold change:", min = 0, max = 10, value=5, step=0.5),
plotlyOutput("plot1"),
textOutput("selectedValues")
))
server <- shinyServer(function(input, output) {
set.seed(1)
threshP <- reactive(input$threshP)
threshFC <- reactive(input$threshFC)
dat <- data.frame(ID = paste0("ID",1:10), FC=runif(10,0,10), pval=runif(10,0,1))
dat$ID <- as.character(dat$ID)
# x-axis FC, y-axis pval
xMax = max(dat$FC)
xMin = min(dat$FC)
yMax = max(dat$pval)
yMin = min(dat$pval)
df <- data.frame()
p <- ggplot(df) + geom_point() + xlim(xMin, xMax) + ylim(yMin, yMax)
gp <- ggplotly(p)
output$plot1 <- renderPlotly({
gp %>% onRender("
function(el, x, data) {
var dat = data.dat
var selFC = [];
var selP = [];
dat.forEach(function(row){
rowFC = row['FC']
rowP = row['pval']
if (rowP <= data.thP && data.thFC <= rowFC){
selFC.push(rowFC);
selP.push(rowP);
}
});
var Traces = [];
var tracePoints = {
x: selFC,
y: selP,
mode: 'markers',
marker: {
color: 'black',
size: 6
},
};
Traces.push(tracePoints);
Plotly.addTraces(el.id, Traces);
var idRows = []
for (a=0; a<data.dat.length; a++){
idRows.push(data.dat[a]['ID'])
}
console.log(idRows)
el.on('plotly_selected', function(e) {
numSel = e.points.length
Points = e.points
selID = []
for (a=0; a<numSel; a++){
PN = Points[a].pointNumber
selRow = idRows[PN]
selID.push(selRow)
}
Shiny.onInputChange('selID', selID);
})
}", data = list(dat = dat, thP=threshP(), thFC=threshFC()))})
selID <- reactive(input$selID)
selDat <- reactive(dat[which(dat$ID %in% selID()), ])
output$selectedValues <- renderPrint({str(selDat())})
})
shinyApp(ui, server)
如果绘制了所有十个点(当“p 值” slider 位于 1,并且“倍数变化” slider 位于 0 时),这将创建正确的输出。例如,在下图中,绘制了所有 10 个数据点,并且用户选择了 p 值(y 轴)接近 1 的数据点。图下方是返回的行,其中有一个折叠 -更改(x 轴)值为 6.61,p 值(y 轴)值为 0.992。似乎正在发挥作用。
但是,如果未绘制所有十个点,则会给出不正确的输出。例如,在下图中,只绘制了 6 个数据点,用户选择了 p 值(y 轴)接近 1 的数据点。图下方是返回的行,其中有一个折叠 -将(x 轴)值更改为 2.02,将 p 值(y 轴)值更改为 0.77。它似乎不起作用。
我意识到/相信问题正在发生,因为当未绘制所有 10 个点时,返回的行索引只能在 1-c 之间,其中 c 是小于 10 的某个数字。因此,行索引不再匹配与原始数据框一致。但是,我不知道如何解决这个问题。
关于如何解决这个问题有什么建议吗?谢谢。
编辑:
感谢有用的调试建议,我认为问题可能会得到解决。技巧是使用 pointNumber 作为包含正在绘制的数据帧子集的数组变量中的索引。在这里,这是 sselID 对象。
library(ggplot2)
library(plotly)
library(htmlwidgets)
ui <- shinyUI(fluidPage(
sliderInput("threshP", "P-value:", min = 0, max = 1, value=1, step=0.05),
sliderInput("threshFC", "Fold change:", min = 0, max = 10, value=0, step=0.5),
plotlyOutput("plot1"),
verbatimTextOutput("selectedValues")
))
server <- shinyServer(function(input, output) {
set.seed(1)
threshP <- reactive(input$threshP)
threshFC <- reactive(input$threshFC)
dat <- data.frame(ID = paste0("ID",1:10), FC=runif(10,0,10), pval=runif(10,0,1))
dat$ID <- as.character(dat$ID)
print(dat)
# x-axis FC, y-axis pval
xMax = max(dat$FC)
xMin = min(dat$FC)
yMax = max(dat$pval)
yMin = min(dat$pval)
df <- data.frame()
p <- ggplot(df) + geom_point() + xlim(xMin, xMax) + ylim(yMin, yMax)
gp <- ggplotly(p)
output$plot1 <- renderPlotly({
gp %>% onRender("
function(el, x, data) {
var dat = data.dat
var selFC = [];
var selP = [];
var sselID = [];
dat.forEach(function(row){
rowFC = row['FC']
rowP = row['pval']
rowID = row['ID']
if (rowP <= data.thP && data.thFC <= rowFC){
selFC.push(rowFC);
selP.push(rowP);
sselID.push(rowID);
}
});
console.log(sselID)
var Traces = [];
var tracePoints = {
x: selFC,
y: selP,
text: sselID,
mode: 'markers',
marker: {
color: 'black',
size: 6
},
};
Traces.push(tracePoints);
Plotly.addTraces(el.id, Traces);
el.on('plotly_selected', function(e) {
console.log(e.points)
numSel = e.points.length
Points = e.points
selID = []
for (a=0; a<numSel; a++){
PN = Points[a].pointNumber
selRow = sselID[PN]
selID.push(selRow)
}
Shiny.onInputChange('selID', selID);
})
}", data = list(dat = dat, thP=threshP(), thFC=threshFC()))})
selID <- reactive(input$selID)
selDat <- reactive(dat[which(dat$ID %in% selID()), ])
output$selectedValues <- renderPrint({selDat()})
})
shinyApp(ui, server)
最佳答案
你有一些有趣的问题...
我做了一些小改动来帮助了解发生了什么:
verbatumTextOutput
文本
字段,向工具提示(ID 变量)添加了更多信息。从那里我可以看到,经常(几乎总是,但并非总是)有一种虚拟点作为第一个点。方便的是,它的 curveNumber
始终为零
我认为这解决了问题。
library(ggplot2)
library(plotly)
library(htmlwidgets)
ui <- shinyUI(fluidPage(
sliderInput("threshP", "P-value:", min = 0, max = 1, value=1, step=0.05),
sliderInput("threshFC", "Fold change:", min = 0, max = 10, value=0, step=0.5),
plotlyOutput("plot1"),
verbatimTextOutput("selectedValues")
))
server <- shinyServer(function(input, output) {
set.seed(1)
threshP <- reactive(input$threshP)
threshFC <- reactive(input$threshFC)
dat <- data.frame(ID = paste0("ID",1:10), FC=runif(10,0,10), pval=runif(10,0,1))
dat$ID <- as.character(dat$ID)
print(dat)
# x-axis FC, y-axis pval
xMax = max(dat$FC)
xMin = min(dat$FC)
yMax = max(dat$pval)
yMin = min(dat$pval)
df <- data.frame()
p <- ggplot(df) + geom_point() + xlim(xMin, xMax) + ylim(yMin, yMax)
gp <- ggplotly(p)
output$plot1 <- renderPlotly({
gp %>% onRender("
function(el, x, data) {
var dat = data.dat
var selFC = [];
var selP = [];
var sselID = [];
dat.forEach(function(row){
rowFC = row['FC']
rowP = row['pval']
rowID = row['ID']
if (rowP <= data.thP && data.thFC <= rowFC){
selFC.push(rowFC);
selP.push(rowP);
sselID.push(rowID);
}
});
var Traces = [];
var tracePoints = {
x: selFC,
y: selP,
text: sselID,
mode: 'markers',
marker: {
color: 'black',
size: 6
},
};
Traces.push(tracePoints);
Plotly.addTraces(el.id, Traces);
var idRows = []
for (a=0; a<data.dat.length; a++){
idRows.push(data.dat[a]['ID'])
}
console.log(idRows)
el.on('plotly_selected', function(e) {
console.log(e.points)
numSel = e.points.length
Points = e.points
selID = []
for (a=0; a<numSel; a++){
CN = Points[a].curveNumber
if (CN>0){
PN = Points[a].pointNumber
selRow = idRows[PN]
selID.push(selRow)
}
}
Shiny.onInputChange('selID', selID);
})
}", data = list(dat = dat, thP=threshP(), thFC=threshFC()))})
selID <- reactive(input$selID)
selDat <- reactive(dat[which(dat$ID %in% selID()), ])
output$selectedValues <- renderPrint({selDat()})
})
shinyApp(ui, server)
屏幕截图:
JavaScript 控制台中 eventData 的屏幕截图:
对于那些想知道如何访问 javascript 控制台的人,您可以:
关于javascript - 当仅绘制某些观察值时,框选择时返回不正确的行索引 - Plotly、htmlWidgets、Shiny,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43299703/
这个问题已经有答案了: How to do case insensitive string comparison? (23 个回答) 已关闭 3 年前。 用户在我的输入栏中写入“足球”,然后执行第 6
啊,不习惯 javascript 中的字符串。 character_id= + id + correct= + correctOrIncorrect 这就是我需要制作成字符串的内容。如果您无法猜测字符
$(function() { var base_price = 0; CalculatePrice(); $(".math1").on('change', function(e) { Calc
我找不到任何文章回答问题:将Spinnaker部署到Spinnaker将管理的同一Kubernetes集群是否安全/正确?我主要是指生产,HA部署。 最佳答案 我认为Spinnaker和Kuberne
我正在使用MSVC在Windows上从源代码(官方源代码发布,而不是从仓库中)构建Qt5(Qt 5.15.0)。 我正在设置环境。变量,依赖项等,然后运行具有1600万个选项的configure,最后
我需要打印一个包含重复单词的数组。我的数组已经可以工作,但我不知道如何正确计算单词数。我已经知道,当我的索引计数器 (i) 为 49 时,并且当 (i) 想要计数到 50 时,我会收到错误,但我不知道
我正在遵循一个指南,该指南允许 Google map 屏幕根据屏幕尺寸禁用滚动。我唯一挣扎的部分是编写一个代码,当我手动调整屏幕大小时动态更改 True/False 值。 这是我按照说明操作的网站,但
我有一个类“FileButton”。它的目的是将文件链接到 JButton,FileButton 继承自 JButton。子类继承自此以使用链接到按钮的文件做有用的事情。 JingleCardButt
我的 friend 数组只返回一个数字而不是所有数字。 ($myfriends = 3) 应该是…… ($myfriends = 3 5 7 8 9 12). 如果我让它进入 while 循环……整个
这个问题在这里已经有了答案: Is there a workaround to make CSS classes with names that start with numbers valid?
我正在制作一个 JavaScript 函数,当调整窗口大小时,它会自动将 div 的大小调整为与窗口相同的宽度/高度。 该功能非常基本,但我注意到在调整窗口大小时出现明显的“绘制”滞后。在 JS fi
此问题的基本视觉效果可在 http://sevenx.de/demo/bootstrap-carousel/inc.carousel/tabbed-slider.html 获得。 - 如果你想看一看。
我明白,如果我想从函数返回一个字符串文字或一个数组,我应该将其声明为静态的,这样当被调用的函数被返回时,内容就不会“消亡”。 但我的问题是,当我在函数内部使用 malloc 分配内存时会怎样? 在下面
在 mySQL 数据库中存储 true/false/1/0 值最合适(读取数据消耗最少)的数据字段是什么? 我以前使用过一个字符长的 tinyint,但我不确定它是否是最佳解决方案? 谢谢! 最佳答案
我想一次读取并处理CSV文件第一行中的条目(例如打印)。我假设使用Unix风格的\n换行符,没有条目长度超过255个字符,并且(现在)在EOF之前有一个换行符。这意味着它是fgets()后跟strto
所以,我们都知道 -1 > 2u == true 的 C/C++ 有符号/无符号比较规则,并且我有一种情况,我想有效地实现“正确”比较。 我的问题是,考虑到人们熟悉的尽可能多的架构,哪种方法更有效。显
**摘要:**文章的标题看似自相矛盾。 本文分享自华为云社区《Java异常处理:如何写出“正确”但被编译器认为有语法错误的程序》,作者: Jerry Wang 。 文章的标题看似自相矛盾,然而我在“正
我有一个数据框,看起来像: dataDemo % mutate_each(funs(ifelse(. == '.', REF, as.character(.))), -POS) # POS REF
有人可以帮助我使用 VBScript 重新格式化/正确格式化带分隔符的文本文件吗? 我有一个文本文件 ^分界如下: AGREE^NAME^ADD1^ADD2^ADD3^ADD4^PCODE^BAL^A
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我是一名优秀的程序员,十分优秀!