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 / user-2049545

bill999's questions

Martin Hope
bill999
Asked: 2025-02-25 12:42:11 +0800 CST

Como forçar o gráfico a parar de ser exibido após um determinado valor do eixo x

  • 5

No Stata, como posso forçar o gráfico a parar de ser exibido após um certo ponto no eixo x?

Por exemplo, digamos que eu tenho:

sysuse auto2, clear
gen mid = (price + weight)/2
gen n = _n
    twoway ///
       (rcap price weight n, horizontal) ///    // 
       (scatter n mid),  ///
       ylabel(, nolabels noticks nogrid) ///     
       legend(off) ///
       xscale(range(0 7000)) ///
       xlabel(0(1000)7000)

insira a descrição da imagem aqui

Neste MWE, estou tentando forçá-lo a parar de exibir após 7.000, mas não funciona. Imagino que o xcalee xlabelpode estar sendo substituído para que todos os elementos rcap's e scatterpossam ser desenhados. O que posso fazer para atingir o resultado desejado?

plot
  • 1 respostas
  • 21 Views
Martin Hope
bill999
Asked: 2024-12-01 00:35:59 +0800 CST

Verifique se o elemento de um dataframe está em outro dataframe, dentro do grupo

  • 9

Digamos que eu tenha estes dados:

library(dplyr)
df1 <- data.frame(x = c(1, 2, 3, 4), z = c("A", "A", "B", "B"))
df2 <- data.frame(x = c(2, 4, 6, 8), z = c("A", "A", "B", "C"))

Posso verificar facilmente se cada elemento de xin df1está presente em xof df2:

df1 <- df1 %>% mutate(present = x %in% df2$x)

Existe uma maneira fácil de fazer a mesma coisa (de preferência no tidyverse), mas verificar apenas dentro do grupo?

Em outras palavras, para que uma observação em seja df1, duas coisas devem ser verdadeiras: 1) o grupo ( ) em deve ser o mesmo que o grupo em e 2) o valor de em deve ser o mesmo que o valor em .presentTRUEzdf2df1xdf2df1

Então, somente a segunda observação ( 2) seria TRUEporque existe uma observação em df2com um xde 2e um zde A. A última observação de xseria FALSEporque mesmo que haja um valor em df2com valor 4, esta observação está em grupo A, não B.

  • 4 respostas
  • 50 Views
Martin Hope
bill999
Asked: 2024-09-13 05:45:50 +0800 CST

Como dividir uma string em apenas duas partes (e não descartar outras partes)

  • 6

Digamos que eu tenha estes dados:

clear all
set obs 2
gen title = "dog - cat - horse" in 1
replace title = "chicken - frog - ladybug" in 2
tempfile data
save `data'

Posso dividi-los em três partes:

use `data', clear
split title, p(" - ") 

E posso dividi-los em duas partes, descartando a terceira parte:

use `data', clear
split title, p(" - ") limit(2)

Existe uma solução pronta para dividir em apenas duas partes, mas agrupar tudo depois do primeiro caractere de divisão (traço neste caso) na segunda variável? Em R, eu usaria separatecom a extra="merge"opção (veja tidyr separa apenas as primeiras n instâncias ).

Em outras palavras, para a primeira linha, gostaria que as primeiras observações title1fossem doge para title2fossem cat - horse.

Percebo que isso é possível usando código personalizado (veja Stata split string into parts ), mas espero um comando simples como o split/R do Stata separatepara atingir meu objetivo.

string
  • 1 respostas
  • 31 Views
Martin Hope
bill999
Asked: 2024-09-04 23:52:14 +0800 CST

Como introduzir um atraso (sono) em mutação por linha

  • 8

Preciso fazer uma chamada para uma API separadamente para cada linha do meu tibble. Como posso introduzir um pequeno atraso entre cada chamada? Preciso fazer isso porque a API que estou usando limita o número permitido de solicitações por segundo.

Como posso modificar o seguinte código (psuedo) para realizar isso? O código cria uma coluna de lista chamada authors, que é preenchida pelo resultado da chamada de API (inventada) get_API_value.

library(tidyverse)
data %>% 
    rowwise() %>%
    mutate(authors = list(get_API_value(arg1 = val1, arg2 = val2)))

Em outras palavras, como posso fazer o código acima incorporar um atraso (como Sys.sleep(1))?

  • 1 respostas
  • 35 Views
Martin Hope
bill999
Asked: 2024-09-04 09:56:08 +0800 CST

Como obter coordenadas de latitude e longitude no mesmo sistema de coordenadas do mapa de limites estaduais

  • 5

Tenho algumas coordenadas, digamos:

library(tidyverse)
library(haven)
library(tidycensus)
library(tigris)

coords <- data.frame(lat = c(38.09720, 36.85298, 31.31517, 21.48344), long = c(-121.38785, -75.97742, -85.85522, -158.03648))

Então recebo um mapa dos EUA:

geo <- get_acs(geography = "state",
               variables = c(x = "B04006_036"),
               year = 2021, 
               geometry = TRUE, 
               keep_geo_vars=TRUE) %>%
    filter(STATEFP!="72")

#to get alaska and hawaii in the picture
geo <- shift_geometry(geo)

Em seguida, tento traçar o mapa do estado, com as coordenadas sobrepostas:

ggplot(data = coords) +
    geom_point(aes(x=lat, y=long)) +
    geom_sf(fill = "transparent", color = "gray50", size = 1, data = geo %>% group_by(STATEFP) %>% summarise()) +   
    theme(panel.background = element_rect(fill = 'white')) +
    theme(panel.grid = element_blank(),axis.title = element_blank(),
          axis.text = element_blank(),axis.ticks = element_blank(),
          panel.border = element_blank())

Isso produz:

insira a descrição da imagem aqui

No entanto, isso não funciona, pois produz um mapa com todas as coordenadas aparentemente no mesmo lugar. Como posso modificar as coisas para que o mapa e as coordenadas fiquem na mesma escala?

  • 1 respostas
  • 25 Views
Martin Hope
bill999
Asked: 2024-08-31 10:04:37 +0800 CST

Como criar uma variável que mostre os intervalos de percentis em que uma observação está

  • 5

Digamos que eu tenho os irisdados.

Eu sei que posso criar uma variável que mostra os valores que se enquadram em um determinado percentil:

library(tidyverse)
iris %>% mutate(Range = cut(Sepal.Length, quantile(Sepal.Length, probs=c(0,.2,.4,.6,.8,1)),include.lowest=TRUE))

Isso produz:

   Sepal.Length Sepal.Width Petal.Length Petal.Width Species   Range
1           4.3         3.0          1.1         0.1  setosa [4.3,4.6]
2           4.4         2.9          1.4         0.2  setosa [4.3,4.6]
3           4.6         3.1          1.5         0.2  setosa [4.3,4.6]
4           4.6         3.4          1.4         0.3  setosa [4.3,4.6]
5           4.7         3.2          1.3         0.2  setosa (4.6,4.8]
6           4.8         3.4          1.6         0.2  setosa (4.6,4.8]
7           4.8         3.0          1.4         0.1  setosa (4.6,4.8]
8           4.9         3.0          1.4         0.2  setosa   (4.8,5]
9           4.9         3.1          1.5         0.1  setosa   (4.8,5]
10          5.0         3.6          1.4         0.2  setosa   (4.8,5]
11          5.0         3.4          1.5         0.2  setosa   (4.8,5]
12          5.1         3.5          1.4         0.2  setosa   (5,5.4]
13          5.4         3.9          1.7         0.4  setosa   (5,5.4]
14          5.4         3.7          1.5         0.2  setosa   (5,5.4]
15          5.7         4.4          1.5         0.4  setosa (5.4,5.8]
16          5.8         4.0          1.2         0.2  setosa (5.4,5.8]

Como posso também criar outra variável que mostre o intervalo de percentil em que a observação cai? Não quero criar manualmente a variável com instruções ifelse, etc., mas espero que haja uma função que a crie automaticamente.

Estou procurando algo que produza uma tabela como esta:

   Sepal.Length Sepal.Width Petal.Length Petal.Width Species   Percent  Range
1           4.3         3.0          1.1         0.1  setosa [4.3,4.6]  [0,.2]
2           4.4         2.9          1.4         0.2  setosa [4.3,4.6]  [0,.2]
3           4.6         3.1          1.5         0.2  setosa [4.3,4.6]  [0,.2]
4           4.6         3.4          1.4         0.3  setosa [4.3,4.6]  [0,.2]
5           4.7         3.2          1.3         0.2  setosa (4.6,4.8]  (.2,.4]
6           4.8         3.4          1.6         0.2  setosa (4.6,4.8]  (.2,.4]
7           4.8         3.0          1.4         0.1  setosa (4.6,4.8]  (.2,.4]
8           4.9         3.0          1.4         0.2  setosa   (4.8,5]  (.4,.6]
9           4.9         3.1          1.5         0.1  setosa   (4.8,5]  (.4,.6]
10          5.0         3.6          1.4         0.2  setosa   (4.8,5]  (.4,.6]
11          5.0         3.4          1.5         0.2  setosa   (4.8,5]  (.4,.6]
12          5.1         3.5          1.4         0.2  setosa   (5,5.4]  (.6,.8]
13          5.4         3.9          1.7         0.4  setosa   (5,5.4]  (.6,.8]
14          5.4         3.7          1.5         0.2  setosa   (5,5.4]  (.6,.8]
15          5.7         4.4          1.5         0.4  setosa (5.4,5.8]  [.8,1]
16          5.8         4.0          1.2         0.2  setosa (5.4,5.8]  [.8,1]
  • 2 respostas
  • 32 Views
Martin Hope
bill999
Asked: 2024-08-31 02:59:13 +0800 CST

Como aplicar várias colunas a uma função, uma de cada vez

  • 5

Tenho um tibble com duas colunas. Para cada linha, quero usar os valores das duas colunas em uma função. Qual é a maneira correta de fazer isso usando tidyverse? Como descreverei em mais detalhes abaixo, não acho que a função (chamada para uma API) possa ser vetorizada.

Para definir ideias, suponha que eu tenha estes dados:

library(tidyverse)
d <- tibble(a=c("a", "b", "d"), b=c("x", "y", "z"))

Quero então aplicar uma função (aqui, apenas uma coisa bem simples). Usando o R base, posso fazer:

for (i in 1:nrow(d)) {
    d[i, "value"] <- paste0(d[i,"a"], d[i, "b"])
}

Qual é a melhor maneira — tidyversea solução é esperada, mas não necessária — de fazer isso para cada linha, passando dois argumentos para a função?

Note que estou ciente de que no exemplo acima, eu poderia fazer d <- d %>% mutate(value = paste0(a, b)), no entanto, meu problema real envolve uma função R que executa uma chamada de API para uma API específica que eu acho que precisa ser executada uma linha por vez. Cada chamada para a API retorna uma lista, que eu quero armazenar no meu tibble.

Observe também que talvez seja necessário um pequeno atraso entre cada chamada de API.

  • 1 respostas
  • 47 Views
Martin Hope
bill999
Asked: 2024-08-27 06:19:41 +0800 CST

Como fazer a caixa de legenda aparecer

  • 6

Digamos que eu crie um mapa coroplético de NC usando este código:

library(ggplot2)
library(sf)
nc <- sf::st_read(system.file("shape/nc.shp", package = "sf"), quiet = TRUE)
b <- ggplot(nc) +
    geom_sf(aes(fill = AREA))
b

insira a descrição da imagem aqui

A lenda parece como deveria.

Em seguida, uso o código da resposta de Paul a esta pergunta ( Como sombrear formas , que é baseado em Não é possível replicar este gráfico ggplot2 ) para criar uma ggrough( https://github.com/xvrdm/ggrough ) versão do gráfico.

#devtools::install_github("xvrdm/ggrough")
library(ggrough)
library(magrittr)

#In the popup window, paste this so that parse_rough will use parse_sf for GeomSf.
function (svg, geom) 
{
    rough_els <- list()
    if (geom %in% c("GeomCol", "GeomBar", "GeomTile", 
                    "Background")) {
        rough_els <- append(rough_els, parse_rects(svg))
    }
    if (geom %in% c("GeomArea", "GeomViolin", "GeomSmooth", 
                    "Background")) {
        rough_els <- append(rough_els, parse_areas(svg))
    }
    if (geom %in% c("GeomPoint", "GeomJitter", "GeomDotPlot", 
                    "Background")) {
        rough_els <- append(rough_els, parse_circles(svg))
    }
    if (geom %in% c("GeomLine", "GeomSmooth", "Background")) {
        rough_els <- append(rough_els, parse_lines(svg))
    }
    if (geom %in% c("Background")) {
        rough_els <- append(rough_els, parse_texts(svg))
    }
    if (geom %in% c("GeomSf")) {
        rough_els <- append(rough_els, parse_sf(svg))
    }
    purrr::map(rough_els, ~purrr::list_modify(.x, geom = geom))
}

parse_sf <- function (svg) {
    shape <- "path"
    keys <- NULL
    ggrough:::parse_shape(svg, shape, keys) %>% {
        purrr::map(., 
                   ~purrr::list_modify(.x, 
                                    points = .x$d, 
                                    shape = "path"
                   ))
    }
}

nc <- sf::st_read(system.file("shape/nc.shp", package = "sf"), quiet = TRUE)
b <- ggplot(nc) +
    geom_sf(aes(fill = AREA))
b


options <- list(GeomSf=list(fill_style="hachure", 
                            angle_noise=0.5,
                            gap_noise=0.2,
                            gap=1.5,
                            fill_weight=1))
get_rough_chart(b, options)

Isso produz:

insira a descrição da imagem aqui

No entanto, a parte da caixa de cores da legenda agora está faltando. Existe uma maneira de exibi-la?

Note que em alguns casos, a legenda funciona. Não tenho certeza se é uma coisa discreta ou contínua, mas a legenda neste ggroughgráfico discretamente colorido na resposta de Z.Lin a esta pergunta funciona ( Não é possível replicar este gráfico ggplot2 ).

  • 1 respostas
  • 49 Views
Martin Hope
bill999
Asked: 2024-08-27 05:06:32 +0800 CST

Como sobrepor dois gráficos com precisão

  • 5

Como ponto de partida, uso o código muito útil da resposta de Kat a esta pergunta ( Como adicionar menos aspereza às bordas de um mapa do que ao preenchimento do mapa ) para criar dois gráficos, com a intenção de que um dos gráficos seja sobreposto ao outro.

library(magrittr)
library(ggplot2)
#devtools::install_github("xvrdm/ggrough")
library(ggrough)
library(sf)
library(htmltools)    
library(ggiraph)      

trace(ggrough:::parse_rough, edit=TRUE)
#In the popup window, paste this so that parse_rough will use parse_sf for GeomSf.
function (svg, geom) 
{
  rough_els <- list()
  if (geom %in% c("GeomCol", "GeomBar", "GeomTile", 
                  "Background")) {
    rough_els <- append(rough_els, parse_rects(svg))
  }
  if (geom %in% c("GeomArea", "GeomViolin", "GeomSmooth", 
                  "Background")) {
    rough_els <- append(rough_els, parse_areas(svg))
  }
  if (geom %in% c("GeomPoint", "GeomJitter", "GeomDotPlot", 
                  "Background")) {
    rough_els <- append(rough_els, parse_circles(svg))
  }
  if (geom %in% c("GeomLine", "GeomSmooth", "Background")) {
    rough_els <- append(rough_els, parse_lines(svg))
  }
  if (geom %in% c("Background")) {
    rough_els <- append(rough_els, parse_texts(svg))
  }
  if (geom %in% c("GeomSf")) {
    rough_els <- append(rough_els, parse_sf(svg))
  }
  purrr::map(rough_els, ~purrr::list_modify(.x, geom = geom))
}

# Create the function parse_sf.
parse_sf <- function (svg) {
  shape <- "path"
  keys <- NULL
  ggrough:::parse_shape(svg, shape, keys) %>% {
    purrr::map(., 
               ~purrr::list_modify(.x, 
                                   points = .x$d, 
                                   shape = "path"
               ))
  }
}
nc <- sf::st_read(system.file("shape/nc.shp", package = "sf"), quiet = TRUE)

b <- ggplot(nc) + geom_sf(color = "black") + theme_minimal() +
  theme(panel.grid = element_line(color = NA),  # not resized or removed! (keep spacing)
        axis.text = element_text(color = NA))

options <- list(GeomSf = list(fill_style = "hachure", angle = 60, angle_noise = 1,
                              gap_noise = 0, gap = 6, fill_weight = 2, bowing = 5,
                              roughness = 30))

(xx <- get_rough_chart(b, options))  # from your question
fixer <- function(ggr) {          # where ggr is the ggrough graph
  nd <- lapply(1:length(ggr$x$data), function(j) {
    if(!is.null(ggr$x$data[[j]]$lengthAdjust)) { # if a text element (axis label)
      ggr$x$data[[j]]$content <- ""              # remove text, but keep spacing
      ggr$x$data[[j]]                            # return modified data element
    } else {
      ggr$x$data[[j]]                            # not text, return orig data
    }
  })
  ggr$x$data <- nd                               # add mod data to graph
  ggr                                            # return mod graph
}
xx2 <- xx %>% fixer()  # modify the plot, to hide text

(g2 <- ggplot(nc) +
    geom_sf(fill = "transparent", color = "black", linewidth = 2) +
    theme_minimal() +
    theme(plot.background = element_rect(fill = NA, color = "transparent"), # no white background
          panel.background = element_rect(fill = NA, color = "transparent"),
          text = element_text(size = 9)))      # text size to match defaults in ggrough

gg <- girafe(ggobj = g2, width_svg = 7, height_svg = 5)  # h/w default w/ ggrough

browsable(div( # parent div, size matches ggrough's default
  style = css(width = "960px", height = "500px", position = "relative"),
  div(xx2, style = css(display = "block")),                           # ggrough graph
  div(gg, style = css(position = "absolute", top = 0, padding.top = "54.2px", # layer behind
                      width = "610px", height = "500px", z.index = -2))
              )) # size and padding found by trial and error with defaults for graph sizes

O gráfico na resposta parece estar sobreposto corretamente. No entanto, quando executo o mesmo código (no RStudio), a sobreposição que obtenho está incorreta:

insira a descrição da imagem aqui

Também testei no RStudio em outro computador, onde também obtive sobreposição imperfeita, mas em um grau diferente.

Tenho duas perguntas:

  1. Como posso sobrepor os gráficos corretamente, sem ter que recorrer à tentativa e erro?
  2. Como posso ajustar o código para que o plano de fundo atual seja alternado para o primeiro plano? Em outras palavras, como posso fazer as bordas pretas ficarem em cima dos rabiscos cinzas em vez do contrário? Tentei trocar a ordem dos dois divs perto do fim, mas isso não funcionou.
  • 1 respostas
  • 58 Views
Martin Hope
bill999
Asked: 2024-08-08 23:58:30 +0800 CST

Com rvest, como selecionar a classe div que contém apenas texto exato

  • 6

Digamos que eu raspei um código como o seguinte:

library(rvest)
library(dplyr)

test <- minimal_html('
  <div class="entry">
        <div class="book">
          <div class="booktitle">Book 1</div>
          <div class="year">1991</div>
        </div>
        <div class="book dont-use">
          <div class="booktitle">Book 2</div>
          <div class="year">1979</div>
        </div>
        <div class="book">
          <div class="booktitle">Book 3</div>
          <div class="year">1399</div>
        </div>
        <div class="book dont-use">
          <div class="booktitle">Book 4</div>
          <div class="year">1949</div>
        </div>        
  </div>')

Para selecionar tudo que contém bookem sua classe, posso usar:

test %>% html_elements(".book")

Isso retorna todos os quatro objetos.

Porém, não quero selecionar a segunda e a quarta entradas, que têm como classe book dont-use. Como posso selecionar apenas a primeira e a terceira entradas? Em outras palavras, como posso modificar o código para selecionar apenas exatamente book?

  • 1 respostas
  • 20 Views
Martin Hope
bill999
Asked: 2024-08-08 03:16:09 +0800 CST

Como criar um quadro de dados a partir de um site copiado do rvest, preservando a estrutura aninhada de dados

  • 6

Digamos que eu use read_html_live()o rvestpacote para extrair algum código parecido com este:

books <- minimal_html('
  <div>
    <div class="book">
      <div class="booktitle">Book 1</div>
      <div class="year">1999</div>
      <div class="author">Author 1</div>
      <div class="author">Author 2</div>
      <div class="author">Author 3</div>
    </div>
    <div class="book">
      <div class="booktitle">Book 2</div>
      <div class="year">2022</div>
      <div class="author">Author 4</div>
    </div>
    <div class="book">
      <div class="booktitle">Book 3</div>
      <div class="year">1845</div>
      <div class="author">Author 5</div>
      <div class="author">Author 6</div>
      <div class="author">Author 7</div>
      <div class="author">Author 8</div>
    </div>    
  </div>')

Eu gostaria de usar o rvestpacote para criar um quadro de dados (ou tibble também seria adequado) com as informações contidas acima. Gostaria que fosse organizado no nível do autor, para que cada linha contenha um autor, o título do livro e o ano.

Se eu me importasse apenas com o primeiro autor, seria fácil. Algo como:

data0 <- books %>% html_elements(".book")
title <- data0 %>% html_element(".booktitle") %>% html_text2()
year <- data0 %>% html_element(".year") %>% html_text2()
author1 <- data0 %>% html_element("author") %>% html_text2()
data <- data.frame(title, year, author1)

No entanto, eu gostaria de extrair todos os autores, sendo os autores "filhos" do livro. E o dataframe teria agora oito linhas, uma para cada autor. Por exemplo, a linha 8 teria Book 3,, 1845e Author 8. Como posso fazer isso?

Aqui está uma ideia aproximada, mas estou procurando soluções mais fáceis:

data0 <- books %>% html_elements(".book") 
title <- data0 %>% html_element(".booktitle") %>% html_text2()
year <- data0 %>% html_element(".year") %>% html_text2()

authors <- data0 %>% html_element(".author")

E então faça um loop sobre os três elementos dos autores e salve cada um deles em um dataframe. E então associe cada um desses dataframes de autor ao título e ano relevantes e de alguma forma transforme-os em um longo dataframe.

  • 2 respostas
  • 38 Views
Martin Hope
bill999
Asked: 2024-02-11 11:15:24 +0800 CST

Como fazer com que geom_curve exiba transparência constante na seta ao usar alfa

  • 9

Meu objetivo é criar linhas curvas em um mapa (conectando pontos), com uma seta de um lado. Essas linhas serão semitransparentes. Parece que a melhor maneira de atingir meu objetivo é usar geom_curve(embora outras ggplot2soluções também sejam ótimas).

Como tal, digamos que tenho este enredo de brinquedo:

library(tidyverse)
library(ggplot2)
data <- data.frame(x = 4, y = 20, xend = 7, yend = 15)

ggplot(data) + geom_curve(aes(x = x, y = y, xend = xend, yend = yend),
    arrow = arrow(length = unit(0.17, "npc"), type="closed", angle=20),
    colour = "red",
    linewidth = 5,
    angle = 90, 
    alpha=.2,
    lineend = "butt",
    curvature = -0.4,
) 

Isso cria: insira a descrição da imagem aqui

O problema que estou enfrentando é que, ao usar geom_curveuma linha semitransparente, a seta aparece com diferentes níveis de transparência quando quero que fique uniforme. Como posso evitar isso?

Esta questão está intimamente relacionada com: A estética alfa mostra o esqueleto da flecha em vez de uma forma simples - como evitá-lo? , exceto que ele usa geom_curveem vez de geom_segment. A resposta brilhante ( https://stackoverflow.com/a/60587296/2049545 ) define uma nova geometria ( geom_arrowbar). Seria possível modificar isso para ser usado geom_curve? Também sinalizarei outra resposta que aponta para geom_gene_arrow( https://stackoverflow.com/a/60655018/2049545 ) - isso pode ser usado com linhas curvas? Ou existe alguma outra solução que funcionaria?

  • 1 respostas
  • 65 Views
Martin Hope
bill999
Asked: 2024-02-08 00:46:45 +0800 CST

Como fazer um mapa de fluxo com setas indicando a direção do fluxo, variando a espessura das linhas e os fluxos de A para B e de B para A não se sobrepondo

  • 5

Tenho interesse em criar um mapa parecido com este (encontrado em https://www.axios.com/2017/12/15/the-flow-of-goods-between-states-1513304375 ): insira a descrição da imagem aqui

Especificamente, quero representar fluxos entre regiões em um mapa com linhas curvas e indicar fluxos maiores com linhas mais largas, e também usar setas para mostrar a direção do fluxo. Se possível, eu também gostaria que a linha de A a B não estivesse no topo da linha de B a A, para que o espectador pudesse distinguir entre as duas. E de preferência use ggplot2, embora esteja aberto a outras soluções.

Observarei que existem questões relacionadas (como Como posso adicionar setas direcionais às linhas desenhadas em um mapa em R? , Como criar um mapa gráfico com setas de direção em R? , plotando o fluxo de e-mail no mapa usando R e https ://flowingdata.com/2011/05/11/how-to-map-connections-with-great-circles/ ), mas queria saber se existe uma solução que me permita incorporar todos os elementos de uma vez. (E não tenho certeza se as soluções anteriores resolvem o problema de não haver sobreposição de A com B e de B com A.)

  • 1 respostas
  • 49 Views

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