小编pha*_*man的帖子

使用stat_function()在R中的ggplot中绘制大量自定义函数

基本问题是我想弄清楚如何在ggplot的同一图中添加大量(1000)自定义函数,使用不同的函数系数值.我已经看到了关于如何添加两个或三个函数但不是1000的其他问题,以及关于添加不同函数形式的问题,但不是具有多个参数值的相同形式...

目标是让stat_function使用存储在数据框中的参数值绘制线条,但没有x的实际数据.

[这里的总体目标是显示来自小数据集的非线性回归的模型参数的巨大不确定性,这转化为与该数据的预测相关的不确定性(我试图说服别人是个坏主意) ).我经常通过绘制由模型参数中的不确定性构建的许多线来实现这一点(安德鲁·格尔曼的多级回归教科书).

例如,这是基础R图形中的图.

#The data
p.gap <- c(50,45,57,43,32,30,14,36,51)
p.ag <- c(43,24,52,46,28,17,7,18,29)
data <- as.data.frame(cbind(p.ag, p.gap))

#The model (using non-linear least squares regression):
fit.1.nls <- nls(formula=p.gap~beta1*p.ag^(beta2), start=list(beta1=5.065, beta2=0.6168))
summary(fit.1.nls)

#From the summary, I find the means and s.e's the two parameters, and develop their distributions:
beta1 <- rnorm(1000, 7.8945, 3.5689)
beta2 <- rnorm(1000, 0.4894, 0.1282)
coefs <- as.data.frame(cbind(beta1,beta2))

#This is the plot I want (using curve() and base R graphics):
plot(data$p.ag, data$p.gap, xlab="% agricultural land use",
     ylab="% of riparian …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

12
推荐指数
1
解决办法
2620
查看次数

R Shiny downloadHandler 返回应用程序 html 而不是绘图或数据

我只是想从模块和绘图辅助函数构建的应用程序中返回用户生成的绘图(内置 ggplot)或数据表。我已经看到很多关于 downloadHandler 非常挑剔的帖子,甚至一些 downloadHandler 的行为似乎存在未解决的问题。我得到的奇怪行为(我还没有看到过相关帖子)是它返回我的应用程序的 html 页面而不是绘图,无论我如何尝试保存绘图(即,使用 pdf/png 设备, ggsave() 等),或者我是否使用 suspendWhenHidden。我可以在 Shiny 外部运行绘图保存代码,它工作正常。我在 Mac 上从浏览器(Firefox,虽然 Chrome 也这样做)运行所有这些,最近更新了所有内容。下面的示例代码。

模块:

library(shiny)
library(ggplot2)
# UI module
modUI <- function(id, label="inputvalues") {
  ns <- NS(id)
  tagList(
    numericInput(ns("mean"), "Mean",value = NULL),
    numericInput(ns("sd"),"Std. Dev.",value = NULL),
    actionButton(ns("draw"),"Draw plot"),
    downloadButton(ns("dlPlot"), "Download Plot")
  )
}

# Server Logic module
mod <- function(input, output, session) {
  x <- reactiveValues(data=NULL)
  observeEvent(input$draw, {
    x$data <- rnorm(100,input$mean,input$sd)
  })

  return(list(dat = reactive({x$data}),
          m = reactive({input$mean}),
          s = reactive({input$sd})
          )
     )
} …
Run Code Online (Sandbox Code Playgroud)

module r ggplot2 shiny

7
推荐指数
1
解决办法
2804
查看次数

将直接标签添加到 geom_smooth 而不是 geom_line

我认识到这个问题的亲密重复这一个,但解决方案也不再有效(使用method="last.qp"),所以我再次要求它。

基本问题是我想使用directlabels(或等效的)来标记每个组的平滑均值(来自stat_smooth()),而不是实际数据。下面的示例显示了我所得到的最接近的结果,但标签无法识别分组,甚至无法识别平滑线。相反,我在最后一点得到了标签。我想要的是每条平滑线末尾的颜色协调文本,而不是图右侧的图例。

下面是一个例子:

library(ggplot2)
library(directlabels)

## Data
set.seed(10)
d <- data.frame(x=seq(1,100,1), y=rnorm(100, 3, 0.5))
d$z <- ifelse(d$y>3,1,0)

## Plot
p <- ggplot(d, aes(x=x, y=y, colour=as.factor(z))) +
  stat_smooth(inherit.aes=T, se=F, span=0.8, show.legend = T) +
  geom_line(colour="grey50") +
  scale_x_continuous(limits=c(0,110)) +
  geom_dl(label="text", method="maxvar.points", inherit.aes=T)
p
Run Code Online (Sandbox Code Playgroud)

这使得这个情节: 在此处输入图片说明

r labels ggplot2 direct-labels ggrepel

5
推荐指数
2
解决办法
3003
查看次数

即使条件没有改变,也会在 Shiny 中触发observeEvent

observeEvent由于工作方式(通常非常直观),我在获取我正在寻找的应用程序中的功能时遇到了一些麻烦。

我正在寻找的基本功能是用户可以输入几个数字,单击“提交”,然后弹出一个模式以获取用户名。之后,应用程序记录姓名并对数字求和,然后清除输入。然后我希望用户能够使用相同的名称重复该过程 - 但应用程序当前的结构是,总和使用仅observeEvent当名称不同时才响应(即,连续两次使用相同的名称不会行不通,尽管我希望如此)。inputSweetAlert您可以在应用程序中看到,我尝试的解决方案是重置(using )的输入shinyjs,但我认为它无法访问它,因为它实际上不在 UI 端。我正在使用shinyWidgets sweetAlerts,我想继续这样做。

这是一个示例应用程序:

library("shiny")
library("shinyWidgets")
library("shinyjs")

ui <- fluidPage(
  shinyjs::useShinyjs(),
  numericInput("num1", "Enter a number", value=NULL),
  numericInput("num2", "Enter another number", value=NULL),
  actionButton(inputId = "go", label = "submit"),
  verbatimTextOutput(outputId = "res1"),
  verbatimTextOutput(outputId = "res2")
)

server <- function(input, output, session) {

  observeEvent(input$go, {
    inputSweetAlert(session = session, inputId = "name", title = "What's your name?")
  })

  x <- reactiveValues(val=NULL)

  observeEvent(input$name, {
    x$val <- input$num1 + input$num2
    confirmSweetAlert(session = session, inputId …
Run Code Online (Sandbox Code Playgroud)

r shiny shinyjs shinywidgets

5
推荐指数
1
解决办法
1813
查看次数

使用 googlesheets4 通过 Shiny 应用程序授权对 googlesheets 的非交互式使用

我知道还有一些其他类似的问题(例如,这里这里),但我想我会再试一次,因为其他人还没有得到很多答案。

我有一个 Shiny 应用程序,允许用户通过该应用程序提供输入,但这些用户需要跳过身份验证步骤。在以前的版本中,googlesheets我公开了该表(对任何有链接的人)并避免了一些身份验证过程。在更新过程中,googlesheets4我在将更新的应用程序部署到shinyapps.io 时遇到了权限问题。这是我尝试过的内容以及得到的结果的总结。任何指示将不胜感激。

首先,根据本文中的建议,我创建了一个服务gargle帐户,下载了一个 JSON 服务帐户令牌(格式为“project-name-12345678abc1.json”),并将其(暂时)保存在父应用程序文件夹中的下假设它需要与应用程序包一起上传。然后我启用了 Google Sheets API。

我已将以下命令放在应用程序的前面,位于任何实质性内容之前:

  1. gs4_deauth(),因为谷歌表格对任何有链接的人都是公开的,因此可能不需要令牌。

  2. 继这篇文章之后gs4_auth(path = "project-name-12345678abc1.json"). 我还添加了scopes参数(如下),并且use_oob=TRUE.

  3. credentials_service_account(scopes = "https://www.googleapis.com/auth/spreadsheets", path = "project-name-12345678abc1.json")

  4. credentials_app_default(path = "project-name-12345678abc1.json")

结果

大多数组合都会给我错误提示“无法获取 Google 凭据”,然后建议我查看漱口网站上的非交互式文章。唯一的例外是尝试 3,它提供了以下错误消息 - 奇怪的是,它很有希望:

警告:错误:客户端错误:(403) PERMISSION_DENIED

  • 客户端没有足够的权限。发生这种情况的原因是 OAuth 令牌没有正确的范围、客户端没有权限或尚未为客户端项目启用 API。

关于我可能会缺少什么的任何想法?该应用程序在本地运行良好。

任何帮助表示赞赏。谢谢!

r google-sheets shiny googlesheets4

5
推荐指数
1
解决办法
927
查看次数

如何在 R Shiny 应用程序中将变量从模块返回到服务器?

我在 R Shiny 应用程序中将变量从模块返回到服务器时遇到了令人惊讶的困难。在模块中,我想在观察到按下按钮时返回一个值,因此我将return()语句包装在observeEvent(). 但是,没有返回所需的值,整个observeEvent()块似乎是。

我试图创建一个最小的工作示例,概述以下问题:

用户界面

# ui.R

fluidPage(
  input_module_ui("input"),
  actionButton("print_input_button",
               label = "Print Input")
)
Run Code Online (Sandbox Code Playgroud)

服务器

# server.R

function(input, output, session) {

  # Calling input module.
  input_module_return <- callModule(input_module, "input")

  observeEvent(input$print_input_button, {
    print(input_module_return)
  })

}
Run Code Online (Sandbox Code Playgroud)

全局R

# global.R

source("modules/input.R")
Run Code Online (Sandbox Code Playgroud)

输入

# input.R

input_module_ui <- function(id) {

  ns <- NS(id)

  tagList(
    textInput(ns("text_input"),
              label = h2("Input Text:")),
    actionButton(ns("submit_input"),
                 label = "Submit Input")
  )

}

input_module <- function(input, output, session) {

  print("I should only print …
Run Code Online (Sandbox Code Playgroud)

module r shiny

3
推荐指数
1
解决办法
1626
查看次数

删除 ggplot2 中未使用的 X 轴级别

我想让 ggplot 只显示有数据的级别。因此,对于第一个方面 S7、S8、S9 不应出现,而对于第二个方面 S1、S2、S3 不应出现。请让我知道我是否正确表达了自己。

df = data.frame(v1 = c('A','A','A','B','B','B'),
           v2 = c('S1','S2','S3','S7','S8','S9'),
           nm = c(2,3,4,5,6,7))



ggplot(df,aes(x =  v2, y = nm)) +
  geom_point(size = 3) +
  facet_grid(.~v1) 
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

r ggplot2

3
推荐指数
1
解决办法
232
查看次数

如何在 ggplot 函数中使用以数字开头的列名

我有一个巨大的数据框,其变量/列名称以数字开头,例如“1_variable”。现在我正在尝试创建一个函数,该函数可以将这些列名称作为参数,然后使用 ggplot 绘制一些箱线图。但是,我需要该字符串,但还需要将其输入与 `` 一起使用,以使用 ggplot 中的参数。但是我不确定如何转义“1_variable”等字符串,以便为 ggplot 提供“1_variable”输入。

可重复的小例子:

dfx = data.frame(`1ev`=c(rep(1,5), rep(2,5)), `2ev`=sample(10:99, 10), 
             `3ev`=10:1, check.names = FALSE)
Run Code Online (Sandbox Code Playgroud)

如果我手动绘制该图,输入将如下所示:

 dfx$`1ev` <- as.factor(dfx$`1ev`)
 ggplot(dfx, aes(x = `1ev`, y = `2ev`))+
   geom_boxplot()
Run Code Online (Sandbox Code Playgroud)

我希望能够为数据帧运行的函数是这样的:

plot_boxplot <- function(data, group, value){
    data = data[c(group, value)]
    data[,group] = as.factor(data[,group])
    plot <- ggplot(data, aes(x = group, y = value))+
    geom_boxplot() 
    return(plot)
}
Run Code Online (Sandbox Code Playgroud)

1. 尝试

plot_boxplot(dfx, `1ev`, `2ev`)
Run Code Online (Sandbox Code Playgroud)

这给了我一个错误说Error in [.data.frame(data, c(group, value)) : object '1ev' not found

2. 尝试

用双引号 "" 输入参数给了我意想不到的结果:

plot_boxplot(dfx, "1ev", …
Run Code Online (Sandbox Code Playgroud)

r escaping function ggplot2

2
推荐指数
1
解决办法
2336
查看次数

选择器输入字体或背景颜色

我在闪亮的仪表板中使用了 pickerInput,这很好,除了一个问题:背景颜色和字体颜色太相似,使过滤器选择难以阅读。

在此处输入图片说明

有没有办法改变背景或字体颜色?如果可能的话,我想继续使用 pickerInput,但如果有一个带有 selectInput 的方法或其他任何东西都可以。

在屏幕截图中产生结果的我的选择器输入之一的示例:

output$typeOutput80 <- renderUI({
  Commodity.Name <- as.vector( unique(DF2()$Commodity.Name) )
  pickerInput("typeOutput80", "Commodity:", 
     choices=Commodity.Name, Commodity.Name [1:10000], multiple=TRUE, 
     options = list(`actions-box` = TRUE, `live-search` = TRUE, 
                    `selected-text-format`= "static", title = "Commodity List")
  )
})`
Run Code Online (Sandbox Code Playgroud)

r shiny

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

在 R 中查找随机数据中的年份

我的数据框中有 71 列,其中 10 列包含的数据可能包含 1990 年至 2019 年之间的年份,格式为 YYYY(例如 2019)。例如:

id_1 <- c("regkfg_2013", "fsgdf-2014", "f2016sghsg", "gjdg1990_3759")
id_2 <- c("dghdgl2013jg", "2fgdg_2014_hf", "ghdg_2016*89", "gc-hs1990")
Run Code Online (Sandbox Code Playgroud)

我正在尝试找到一种方法从相关单元格中提取年份并将其插入新列中。

到目前为止,我只知道如何以非常耗时的方式过滤数据。我生成了以下代码,其开头如下:

dated_data <- select(undated_data, 1:71) %>% 
                filter(grepl("1990", id_1) | filter(grepl("1990", id_2) | filter(grepl("1991", id_1) | filter(grepl("1991", id_2)
Run Code Online (Sandbox Code Playgroud)

然而,写完这十个专栏、整整三十年,真的需要很长的时间。我确信有更快的方法。我也不知道如何将每个匹配单元格中的日期提取到新单元格中。

我想要的输出如下所示:

dated_data$year <- c("2013", "2014", "2016", "1990")

有谁知道我该怎么做?预先感谢您的帮助!

regex r

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

并排绘制两个县,同时保持比例

有没有办法并排绘制两个县(不改变实际比例)来比较它们的大小。

我希望并排绘制圣地亚哥和圣克拉拉,以展示它们的实际大小。

谢谢

library(tigris)
library(ggplot2)

san_diego <- county_subdivisions(state = "CA", county = "San Diego County", cb = TRUE, year = NULL)

santa_clara <- county_subdivisions(state = "CA", county = "Santa Clara County", cb = TRUE, year = NULL)


gg_san_diego <- ggplot() + 
  geom_sf(data = san_diego, 
          color="black",
          fill="white", 
          size=0.25)

gg_santa_clara <- ggplot() + 
  geom_sf(data = santa_clara, 
          color="black",
          fill="white", 
          size=0.25)


gg_san_diego

gg_santa_clara

Run Code Online (Sandbox Code Playgroud)

r ggplot2 tigris tmap r-sf

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