2012-12-20 13 views
7

Sto usando panda e matplotlib per generare grafici a barre con molte barre.Selezione colore per matplotlib che stampa bene

So come scorrere un elenco di colori selezionati (How to give a pandas/matplotlib bar graph custom colors). La domanda è quale colore selezionare in modo che il mio grafico si stampi bene su un foglio (è per un documento di ricerca). Quello che mi interessa di più è il contrasto sufficiente tra le colonne e una selezione di colori che sembra piacevole. Mi piacerebbe avere più colori al posto dei colori in scala di grigi o in tonalità singola.

Esistono schemi prestabiliti da selezionare da utilizzare?

+2

sguardo 'cubehelix' – tacaswell

+0

Cubehelix è impressionante. Ho letto il giornale di Dave Green. Esattamente quello che volevo. Ho ottenuto un aspetto eccellente e grafici di stampa al primo tentativo. Se il tuo commento fosse una risposta lo accetterei. – vkontori

+0

aggiunto come risposta – tacaswell

risposta

11

nella 1.5 matplotlib sarà disponibile con 4 nuove mappe a colori razionalmente progettati:

  • 'viridis' (sarà mappa dei colori predefinita in 2,0)
  • 'magma'
  • 'plasma'
  • 'inferno'.

Il processo di progettazione di queste mappe a colori è presentato in https://youtu.be/xAoljeRJ3lU.

enter image description here

Lo strumento sviluppato per questo processo può essere installato da pip install viscm


Vorrei suggerire la mappa cubehelix colore.È designed per avere l'ordine di luminosità corretto in entrambi i colori e in scala di grigi

5

Non sono a conoscenza di schemi predeterminati. Di solito uso pochi colori per i grafici di pubblicazione. Io per lo più prendere due cose in considerazione al momento di scegliere i colori:

  1. daltonismo: this pagina su Wikipedia ha un sacco di buone informazioni circa la scelta dei colori che si distinguono per la maggior parte delle persone daltonici. Se noti la sezione "Suggerimenti per gli editor", una volta prese in considerazione le linee guida, sono disponibili solo pochi set di colori. (Una buona regola empirica è quella di non mischiare mai il rosso e il verde!) Puoi anche usare i simulatori ciechi collegati per vedere se la tua trama sarebbe ben visibile.
  2. Luminanza: la maggior parte delle riviste nel mio campo verrà pubblicata in B & W per impostazione predefinita. Anche se la maggior parte delle persone legge i giornali online, mi piace ancora assicurarmi che i grafici possano essere capiti quando stampati in scala di grigi. Quindi mi prendo cura di usare colori con diverse luminanze. Per testare, un buon modo è semplicemente desaturare l'immagine prodotta, e avrai una buona idea di come appare quando stampata in scala di grigi. In molti casi (in particolare grafici a linee o a dispersione), uso anche altre cose oltre al colore per distinguere tra insiemi (ad esempio stili di linea, marcatori diversi).

Se nessun colore è specificato nei grafici matplotlib, ha un set predefinito di colori che scorre attraverso. This answer ha una buona spiegazione su come cambiare quel set di colori predefinito. Puoi personalizzarlo in base al tuo set di colori preferito, in modo che i grafici possano usarli a turno.

18

Quindi i tuoi requisiti sono "molti colori" e "non ci sono due colori che devono essere associati allo stesso valore di scala di grigi quando stampati", giusto? Il secondo criterio dovrebbe essere soddisfatto da eventuali mappe "sequenziali" (che aumentano o diminuiscono monoticamente in luminanza). Penso di tutte le scelte in matplotlib, si sono lasciati con cubehelix (già citato), gnuplot, e gnuplot2:

3 colormaps, showing luminance and hue

La linea bianca è la luminanza di ogni colore, in modo da poter vedere che ogni il colore verrà mappato su un valore di scala di grigi diverso durante la stampa. La linea nera è tonalità, mostrando che attraversano una varietà di colori.

Nota che cubehelix è in realtà una funzione (from matplotlib._cm import cubehelix) ed è possibile regolare i parametri dell'elica per produrre colori più variabili, as shown here. In altre parole, cubehelix non è una mappa dei colori, è una famiglia di mappe di colori. Qui ci sono 2 varianti:

enter image description here

enter image description here

Per i colori meno selvaggiamente-variabili (più piacevole per molte cose, ma forse non per i vostri grafici a barre), magari provare le mappe 3-colore ColorBrewer, YlOrRd, PuBuGn, YlGnBu:

3 colormaps with monotonic luminance but less hue variation

https://www.flickr.com/photos/omegatron/7298887952/

Tuttavia, non è consigliabile utilizzare solo questo colore per identificare i grafici a barre. Dovresti sempre utilizzare le etichette di testo come identificatore principale. Si noti inoltre che alcuni di questi producono barre bianche che completamente si fondono con lo sfondo, in quanto sono destinati heatmaps, non chart colori:

from matplotlib import pyplot as plt 
import pandas, numpy as np # I find np.random.randint to be better 

# Make the data 
x = [{i:np.random.randint(1,5)} for i in range(10)] 
df = pandas.DataFrame(x) 

# Make a list by cycling through the colors you care about 
# to match the length of your data. 
cmap = plt.get_cmap('cubehelix') 
indices = np.linspace(0, cmap.N, len(x)) 
my_colors = [cmap(int(i)) for i in indices] 

# Specify this list of colors as the `color` option to `plot`. 
df.plot(kind='bar', stacked=True, color=my_colors) 

gnuplot bar graph

gnuplot2 bar graph

cubehelix bar graph

YlGnBu bar graph

E questi sono i nuovi ragazzi:

new guys colorbars

viridis bar graph

+0

Puoi aggiungere una nota alla tua risposta qui le nuove mappe dei colori? So che posso modificarlo da solo, ma sembra maleducato. – tacaswell

+0

@tcaswell done :) puoi darmi qualche consiglio su http://stackoverflow.com/q/31888825/125507? – endolith

Problemi correlati