AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / coding / Perguntas / 79575071
Accepted
erc
erc
Asked: 2025-04-15 19:55:24 +0800 CST2025-04-15 19:55:24 +0800 CST 2025-04-15 19:55:24 +0800 CST

Crie elipses com base no dataframe

  • 772

Tenho um dataframe com coordenadas e raios para uma elipse em cada linha.

dat <- data.frame(id = c("a", "b", "c"),
                  x = c(1, 2, 3),
                  y = c(1, 2, 3),
                  sx = c(.3, .5, .7),
                  sy = c(.2, .4, .6))
> dat
  id x y  sx  sy
1  a 1 1 0.3 0.2
2  b 2 2 0.5 0.4
3  c 3 3 0.7 0.6

Como posso criar um objeto espacial com todas as elipses?

Tentei o seguinte, o que resultou em um erro.

library(dplyr)
library(sfdep)
    dat %>%
      rowwise() %>%
      ellipse(x = x, y = y, sx = sx, sy = sy, n = 10, rotation = 0)

Error in ellipse(., x = x, y = y, sx = sx, sy = sy, n = 10, rotation = 0) : 
  unused argument (.)
  • 2 2 respostas
  • 68 Views

2 respostas

  • Voted
  1. jay.sf
    2025-04-15T20:17:37+08:002025-04-15T20:17:37+08:00

    Obviamente, sfdep::ellipse()não tem um argumento de dados onde você tenta passar .. Operações por linha são ineficientes de qualquer maneira, então, em vez de se preocupar com isso, você pode usá-lo Map()para passar as colunas como vetores.

    > res <- do.call('Map', c(list(f=sfdep::ellipse), dat[-1])) |> setNames(dat$id)
    

    Dá

    > lapply(res, head, 3)
    $a
                x        y
    [1,] 1.300000 1.000000
    [2,] 1.299408 1.012558
    [3,] 1.297634 1.025067
    
    $b
                x        y
    [1,] 2.500000 2.000000
    [2,] 2.499013 2.025116
    [3,] 2.496057 2.050133
    
    $c
                x        y
    [1,] 3.700000 3.000000
    [2,] 3.698619 3.037674
    [3,] 3.694480 3.075200
    

    Trace-o

    rng <- asplit(matrixStats::colRanges(do.call(rbind, res)), 1)
    par(mar=c(4.5, 4, 2, 2))
    with(rng, plot(x, y, type='n'))
    clr <- hcl.colors(length(res))
    mapply(lines, res, col=clr)
    legend('topleft', title='foo', legend=names(res), lty=1, col=clr)
    

    insira a descrição da imagem aqui

    • 3
  2. Best Answer
    margusl
    2025-04-15T20:36:01+08:002025-04-15T20:36:01+08:00

    Tente transformar data.frameem sfobjeto de pontos primeiro, depois você pode usar st_ellipse(). Com rowwise()você ainda precisa usar mutate().

    library(sfdep)
    library(dplyr)
    library(sf)
    #> Linking to GEOS 3.13.1, GDAL 3.10.2, PROJ 9.5.1; sf_use_s2() is TRUE
    
    dat <- data.frame(id = c("a", "b", "c"),
                      x = c(1, 2, 3),
                      y = c(1, 2, 3),
                      sx = c(.3, .5, .7),
                      sy = c(.2, .4, .6))
    
    dat_sf <- 
      dat |> 
      st_as_sf(coords = c("x","y"), remove = FALSE) |> 
      rowwise() |> 
      mutate(geometry = st_ellipse(geometry, sx, sy, rotation = 0, n = 10)) |> 
      ungroup()
    
    dat_sf
    #> Simple feature collection with 3 features and 5 fields
    #> Geometry type: LINESTRING
    #> Dimension:     XY
    #> Bounding box:  xmin: 0.7 ymin: 0.8097887 xmax: 3.7 ymax: 3.570634
    #> CRS:           NA
    #> # A tibble: 3 × 6
    #>   id        x     y    sx    sy                                         geometry
    #>   <chr> <dbl> <dbl> <dbl> <dbl>                                     <LINESTRING>
    #> 1 a         1     1   0.3   0.2 (1.3 1, 1.242705 1.117557, 1.092705 1.190211, 0…
    #> 2 b         2     2   0.5   0.4 (2.5 2, 2.404508 2.235114, 2.154508 2.380423, 1…
    #> 3 c         3     3   0.7   0.6 (3.7 3, 3.566312 3.352671, 3.216312 3.570634, 2…
    
    plot(dat_sf[,"id"], axes = TRUE)
    

    • 3

relate perguntas

  • Adicionar número de série para atividade de cópia ao blob

  • A fonte dinâmica do empacotador duplica artefatos

  • Selecione linhas por grupo com 1s consecutivos

  • Lista de chamada de API de gráfico subscritoSkus estados Privilégios insuficientes enquanto os privilégios são concedidos

  • Função para criar DFs separados com base no valor da coluna

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Reformatar números, inserindo separadores em posições fixas

    • 6 respostas
  • Marko Smith

    Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não?

    • 2 respostas
  • Marko Smith

    Problema com extensão desinstalada automaticamente do VScode (tema Material)

    • 2 respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Martin Hope
    Fantastic Mr Fox Somente o tipo copiável não é aceito na implementação std::vector do MSVC 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant Encontre o próximo dia da semana usando o cronógrafo 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor O inicializador de membro do construtor pode incluir a inicialização de outro membro? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul O C++20 mudou para permitir a conversão de `type(&)[N]` de matriz de limites conhecidos para `type(&)[]` de matriz de limites desconhecidos? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann Como/por que {2,3,10} e {x,3,10} com x=2 são ordenados de forma diferente? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve