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 / 78821442
Accepted
Melanie Baker
Melanie Baker
Asked: 2024-08-01 22:14:57 +0800 CST2024-08-01 22:14:57 +0800 CST 2024-08-01 22:14:57 +0800 CST

Adicionar item de rótulo à legenda semelhante a geom_label_repel()

  • 772

Eu tenho um gráfico de riqueza de espécies que possui nove linhas. Rotulei cada linha no final usando geom_label_repel() com o número quadrático apropriado. Quero adicionar à minha legenda uma caixa de etiqueta preta semelhante com um número 1 ou um hash (#) com 'Quadrat Number' escrito ao lado.

Este é meu enredo atual:

insira a descrição da imagem aqui

Esta é uma versão editada em PowerPoint que gostaria que a legenda se parecesse com:

insira a descrição da imagem aqui

Subconjunto de dados:

dados para gráfico (índice):

structure(c("function (..., list = character(), package = NULL, lib.loc = NULL, ", 
"    verbose = getOption(\"verbose\"), envir = .GlobalEnv, overwrite = TRUE) ", 
"{", "    fileExt <- function(x) {", "        db <- grepl(\"\\\\.[^.]+\\\\.(gz|bz2|xz)$\", x)", 
"        ans <- sub(\".*\\\\.\", \"\", x)"), dim = c(6L, 1L), dimnames = list(
    c("1", "2", "3", "4", "5", "6"), ""), class = "noquote")

rótulos para gráfico (labels_df):

structure(list(Quadrat = structure(1:9, levels = c("1", "2", 
"3", "4", "5", "6", "7", "8", "9"), class = "factor"), Year = c(2024L, 
2024L, 2024L, 2024L, 2024L, 2024L, 2024L, 2024L, 2024L), ID = c("1_24", 
"2_24", "3_24", "4_24", "5_24", "6_24", "7_24", "8_24", "9_24"
), Source = c("Beaver", "Beaver", "Beaver", "Beaver", "Beaver", 
"Beaver", "SSSI", "SSSI", "SSSI"), specNum = c(20L, 21L, 19L, 
6L, 2L, 8L, 15L, 29L, 16L), simpson = c(0.95, 0.952380952380952, 
0.947368421052632, 0.833333333333333, 0.5, 0.875, 0.933333333333333, 
0.96551724137931, 0.9375), shannon = c(2.99573227355399, 3.04452243772342, 
2.94443897916644, 1.79175946922805, 0.693147180559945, 2.07944154167984, 
2.70805020110221, 3.36729582998647, 2.77258872223978), H = c(2.99573227355399, 
3.04452243772342, 2.94443897916644, 1.79175946922805, 0.693147180559945, 
2.07944154167984, 2.70805020110221, 3.36729582998647, 2.77258872223978
), fisher = c(4294967306, 4294967306.5, 4294967305.5, 1073741869.66667, 
268435505.000009, 2147483652, 4294967303.5, 4294967310.5, 4294967304
)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-9L))

Código para plotagem

library(ggplot2)            # for plottin graphs
library(ggrepel)            # for geom_label_repel()
library(pals)               # for lines colour scale

specPlot <- ggplot(index, aes(x=Year, y=specNum, group=Quadrat, color=Quadrat, linetype=Source)) +
  geom_line() +
  geom_point() +
  labs(x='Year', y='Species Richness') +
  scale_colour_manual(values = unname(kovesi.isoluminant_cgo_70_c39(n=9)), guide = "none") +
  scale_linetype_manual(name = NULL, values = c('Beaver' = 'solid', 'SSSI' = 'dashed')) +
  geom_label_repel(data=labels_df,aes(label=Quadrat),
                   direction='y',
                   segment.colour='black',
                   xlim=c(2024,2025),
                   na.rm = TRUE,
                   max.overlaps=100,
                   show.legend = FALSE) +
  theme_classic() +
  theme(legend.position='top',
        legend.direction = 'horizontal',
        text = element_text(size = 14, family = 'Calibri Light')) +
  coord_cartesian(clip='off')
  • 1 1 respostas
  • 26 Views

1 respostas

  • Voted
  1. Best Answer
    2024-08-01T22:38:10+08:002024-08-01T22:38:10+08:00

    Aqui está uma opção para alcançar o resultado desejado que falsifica uma legenda para o "rótulo" mapeando aes alphae configurando show.legend=TRUE. No entanto, isso requer alguns ajustes adicionais por meio do override.aesargumento para obter o símbolo desejado.

    Infelizmente, isso também exibirá o rótulo na linetypelegenda e a única opção que encontrei para me livrar disso foi usar o override.aesargumento uma segunda vez.

    library(ggplot2) # for plottin graphs
    library(ggrepel) # for geom_label_repel()
    library(pals) # for lines colour scale
    
    set.seed(123)
    
    ggplot(index, aes(x = Year, y = specNum, color = Quadrat)) +
      geom_line(aes(linetype = Source, group = Quadrat)) +
      geom_point() +
      labs(x = "Year", y = "Species Richness") +
      scale_colour_manual(values = unname(kovesi.isoluminant_cgo_70_c39(n = 9)), guide = "none") +
      scale_linetype_manual(
        name = NULL, values = c("Beaver" = "solid", "SSSI" = "dashed")
      ) +
      scale_alpha_manual(
        name = NULL, values = 1
      ) +
      geom_label_repel(
        data = subset(index, Year >= max(Year)),
        aes(
          label = Quadrat,
          alpha = "Quadrat Number"
        ),
        direction = "y",
        segment.colour = "black",
        xlim = c(2024, 2025),
        na.rm = TRUE,
        max.overlaps = 100
      ) +
      theme_classic() +
      theme(
        legend.position = "top",
        legend.direction = "horizontal",
        #text = element_text(size = 14, family = "Calibri Light")
      ) +
      coord_cartesian(clip = "off") +
      guides(
        alpha = guide_legend(override.aes = list(label = "#")),
        linetype = guide_legend(override.aes = list(label = "", fill = NA, size = 0))
      )
    #> `geom_line()`: Each group consists of only one observation.
    #> ℹ Do you need to adjust the group aesthetic?
    

    • 1

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

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

    • 1 respostas
  • Marko Smith

    Por que esse código Java simples e pequeno roda 30x mais rápido em todas as JVMs Graal, mas não em nenhuma JVM Oracle?

    • 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

    Quando devo usar um std::inplace_vector em vez de um std::vector?

    • 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
  • Marko Smith

    Estou tentando fazer o jogo pacman usando apenas o módulo Turtle Random e Math

    • 1 respostas
  • Martin Hope
    Aleksandr Dubinsky Por que a correspondência de padrões com o switch no InetAddress falha com 'não cobre todos os valores de entrada possíveis'? 2024-12-23 06:56:21 +0800 CST
  • Martin Hope
    Phillip Borge Por que esse código Java simples e pequeno roda 30x mais rápido em todas as JVMs Graal, mas não em nenhuma JVM Oracle? 2024-12-12 20:46:46 +0800 CST
  • Martin Hope
    Oodini Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores? 2024-12-12 06:27:11 +0800 CST
  • Martin Hope
    sleeptightAnsiC `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso? 2024-11-09 07:18:53 +0800 CST
  • Martin Hope
    The Mad Gamer Quando devo usar um std::inplace_vector em vez de um std::vector? 2024-10-29 23:01:00 +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
  • Martin Hope
    MarkB Por que o GCC gera código que executa condicionalmente uma implementação SIMD? 2024-02-17 06:17:14 +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