小编JAp*_*nte的帖子

如何在没有数据的类别上强制执行ggplot的position_dodge?

我正在尝试在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的功能.

r ggplot2

19
推荐指数
1
解决办法
7746
查看次数

在R Shiny中实施CRUD工作流程的最简洁方法是什么?

我正在尝试在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问题的答案来实现这一目标:

闪亮的保存URL状态子页面和选项卡

提前致谢.

r crud shiny

16
推荐指数
1
解决办法
1490
查看次数

在使用RPostgreSQL提取数据时,是否有一种特定的方法来处理R中的时间戳列?

我正在尝试从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)

r posixct rpostgresql

7
推荐指数
2
解决办法
2715
查看次数

标签 统计

r ×3

crud ×1

ggplot2 ×1

posixct ×1

rpostgresql ×1

shiny ×1