C'è un modo per rendere le linee geom_boxplot
linee, baffi e punti anomali ereditare lo stesso alpha
assegnato al grafico a scatole fill
nella trama seguente?geom_boxplot: mappa i livelli alfa in baffi e valori anomali
risposta
non sono sicuro se c'è un modo naturale per farlo entro ggplot2
, ma ecco un modo hacky: L'estetica del colore determina il colore delle linee, baffi, e punti esterni. Quindi aggiungeremo un'estetica del colore alla trama. Tuttavia, imposteremo i colori manualmente in modo che includano la sequenza di valori alfa nelle definizioni dei colori. Di conseguenza, aggiungiamo efficacemente valori alfa all'estetica del colore. Ho mappato l'estetica a Species
in modo che possa avere tre diversi livelli alfa per l'illustrazione e aggiunto theme_bw()
per un migliore contrasto dei valori alfa.
In primo luogo, impostare i valori alfa che vogliamo nel grafico finale:
numVals = length(unique(iris$Species))
avals = seq(0.9, 0.3, length.out=numVals)
Ecco l'hack: Impostare i tutti i colori al nero, ma aggiungere la sequenza a livello di alfa per la definizione del colore. Per questo, abbiamo bisogno di convertire i livelli alfa in esadecimali su una scala 0 - 255.
avalsHex = paste0("#000000", toupper(as.hexmode(round(avals*255))))
Nel codice precedente, avals*255
sono i livelli di alfa su una scala 0 - 255. as.hexmode
converte quei valori in esadecimali. toupper
non è strettamente necessario, ma sono abituato a vedere le definizioni esadecimali dei colori in maiuscolo. Quindi incolliamo il valore alfa esadecimale a due cifre sulla fine del colore, in questo caso nero (#000000
), che fornisce un vettore di tre colori che includono valori alfa.
Nessun complotto ci sia con il colore e alfa estetica ei valori manuali per ogni estetica:
ggplot(iris, aes(x = Species, y = Sepal.Length)) +
geom_boxplot(aes(color=Species, alpha = Species)) +
scale_alpha_manual(values = avals) +
scale_colour_manual(values = avalsHex)
AGGIORNAMENTO: Per affrontare il tuo commento, ecco un esempio con colori diversi in Oltre ai valori alpha:
avalsHex = paste0(c("#FF0000","#00FF00","#0000FF"), toupper(as.hexmode(round(avals*255))))
Quindi eseguire lo stesso codice di traccia per ottenere:
UPDATE 2: Pensando a colori mi ha fatto capire che non è nemmeno necessario la conversione in esadecimale di aggiungere i valori alfa. Ad esempio, con i colori hcl
si può fare questo:
# Black boxplots with 3 different alpha levels
scale_colour_manual(values = hcl(0,0,0, alpha=avals))
# Colored boxplots with 3 different alpha levels
scale_colour_manual(values=hcl(seq(15,375,length.out=4)[1:3], 100, 65, alpha=avals))
La funzione hcl
restituisce il codice di esa decimale per ogni colore, in effetti curando la conversione per voi.
Non come hacky come temevo! Se avessi un vettore di colori di riempimento diversi (cioè non tutti iniziando da "# 000000'), questo metodo funzionerebbe ancora?(scusa, la prima frase è stata pubblicata prematuramente) – mdlincoln
Beh, mantiene lo spirito della grammatica di 'ggplot', ma devi andare al di fuori del normale flusso di lavoro ggplot per farlo funzionare. – eipi10
Per rispondere al resto del tuo commento: Sì. Puoi attaccare qualsiasi livello alfa che desideri su qualsiasi colore esadecimale aggiungendo le ulteriori due cifre esadecimali. Vedi l'aggiornamento per un semplice esempio. – eipi10
potresti voler dare un'occhiata a [questa domanda] (http://stackoverflow.com/questions/34601194/change-colours-to-defined-palette-for-ggplot-objects) da oggi in poi – mtoto