我正在尝试在ggplot上使用position_dodge来获取共享相同类别(cat)的两个不同信号(ind)的箱线图.当存在具有一个信号的数据但不存在另一个信号的数据的类别时,具有数据的信号的箱图表覆盖所有水平间距,并且不尊重该特定类别的position_dodge指令.有没有办法让ggplot强制执行躲避规则?正如您在下面的示例中所看到的,信号x没有类别B的数据,因此它会丢失position_dodge保留的空间.我想避免这种情况.
提前致谢.
data<-data.frame(cat=c('A','A','A','A','B','B','A','A','A','A','B','B'),
values=c(3,2,1,4,NA,NA,4,5,6,7,8,9),
ind=c('x','x','x','x','x','x','y','y','y','y','y','y'))
print(ggplot() +
scale_colour_hue(guide='none') +
geom_boxplot(
aes(x=as.factor(cat), y=values,
fill=ind),
position=position_dodge(width=.60),
data=data,
outlier.size = 1.2,
na.rm=T))
Run Code Online (Sandbox Code Playgroud)

经过一些解决方法,我想出了我正在寻找的结果......(有点)
data <- data.frame(
cat=c('A','A','A','A','B','B','A','A','A','A','B','B','B'),
values=c(3,2,1,4,NA,NA,4,5,6,7,8,9, 0),
ind=c('x','x','x','x','x','x','y','y','y','y','y','y','x'))
p <- ggplot() +
scale_colour_hue(guide='none') +
geom_boxplot(aes(x=as.factor(cat), y=values, fill=ind),
position=position_dodge(width=.60),
data=data,
outlier.size = 1.2,
na.rm=T) +
geom_line(aes(x=x, y=y),
data=data.frame(x=c(0,3),y=rep(0,2)),
size = 1,
col='white')
print(p)
Run Code Online (Sandbox Code Playgroud)

有些人使用刻面来重新设想我想要的效果.Faceting并没有给我正在寻找的效果.我正在寻找的最终图表如下所示:

如果您注意到,y = 10处的白色主刻度标记比其他刻度标记厚.这条较粗的线是大小= 1的geom_line,它隐藏了不需要的箱形图.
我希望我们能够更无缝地组合不同的geom对象.我把这报告为Hadley的github上的一个bug,但是Hadley说这就是position_dodge的设计行为.我想我正在以非标准的方式使用ggplot2,而解决方法是解决这些问题的方法.无论如何,我希望这有助于一些R人员进一步推动ggplot的功能.
我正在尝试在Shiny中实现CRUD工作流程(创建/读取/更新/删除)来管理数据库记录.看来Shiny默认不支持这种工作流程,所以我想知道是否有一种干净的方法来实现这一点.
为了缩小问题的范围,我很难将静态链接添加到指向特定tabPanel的记录表中以编辑相应的记录.
这是一个模型示例,可以更轻松地解决此问题.
ui.R
library(shiny)
shinyUI(navbarPage("Example",
tabPanel("Event List",
sidebarLayout(
sidebarPanel(list(
p("If you click the link, it should go to the edit event panel."),
p("But it's not...")
), align="left"),
mainPanel(
h3("Event List"),
tableOutput('testTable'),
dataTableOutput('events_table'),
align="center"))),
tabPanel("Edit Event", id='edit',
sidebarLayout(
sidebarPanel(
uiOutput("choose_event_id"),
align="center"),
mainPanel()
)),
id='top'
))
Run Code Online (Sandbox Code Playgroud)
server.R
library(shiny)
shinyServer(function(input, output, session) {
output$choose_event_id <- renderUI({
selectizeInput("event_id", "Event", width='100%',
choices=c(1,2,3), selected=1)
})
output$testTable <- renderTable({
require(xtable)
table <- xtable(data.frame(A=1,B='<a href="LINK-HERE">test</a>'))
table
}, sanitize.text.function = function(x) x)
})
Run Code Online (Sandbox Code Playgroud)
LINK-HERE部分是我想弄清楚的.每次重新启动应用程序时,tabPanels链接都会更改,因此在这种情况下静态链接不起作用.
第二个问题是传递要在URL中编辑的记录的ID,但如果需要,可以留下后续问题.我将尝试通过使用此SO问题的答案来实现这一目标:
提前致谢.
我正在尝试从PostgreSQL数据库中提取数据,并且时间戳字段的结果不一致.我不确定我是否正确处理POSIXct结果.否则,我想我在RPostgreSQL包中发现了一个错误.以下是复制问题的方法:
假设postgres数据库中有一个表有一个字段(在PostgreSQL中运行):
CREATE DATABASE mydb;
CREATE TABLE test_table
(
"DateTime" timestamp without time zone NOT NULL,
CONSTRAINT "pk_test_table" PRIMARY KEY ("DateTime")
)
WITH (
OIDS=FALSE
);
ALTER TABLE test_table
OWNER TO postgres;
Run Code Online (Sandbox Code Playgroud)
让我们说有几百条记录.我将在R中填充它们.这是代码:
library(RPostgreSQL)
# Let's feed the table with some sequence of date/time values
date_values <- as.chron(seq(10000, 10500, 1/24))
format.chron <- function(z) {
sprintf("%04.0f-%02.0f-%02.0f %02.0f:%02.0f:00",
as.numeric(as.character(years(z))),
months(z),
as.numeric(as.character(days(z))),
as.numeric(as.character(hours(z))),
as.numeric(as.character(minutes(z))))
}
.generateInsertQuery <- function(date_values, field_name, table_name) {
insert_val <- paste(paste0("(", sQuote(format(date_values)), ")"), collapse=',')
qry <- paste("INSERT INTO", dQuote(table_name), paste0("(", …Run Code Online (Sandbox Code Playgroud)