Ich zeichne einen kategorialen Datensatz und möchte verschiedene Farben verwenden, um verschiedene Kategorien darzustellen. Bei einer Zahl n
, wie kann ich n
Anzahl der markantesten Farben in R? Vielen Dank.
130
Ich zeichne einen kategorialen Datensatz und möchte verschiedene Farben verwenden, um verschiedene Kategorien darzustellen. Bei einer Zahl n
, wie kann ich n
Anzahl der markantesten Farben in R? Vielen Dank.
Antworten:
Ich habe alle qualitativen Paletten aus dem
RColorBrewer
Paket zusammengefügt. Qualitative Paletten sollen jeweils X markanteste Farben liefern. Wenn Sie sie mischen, werden natürlich auch ähnliche Farben zu einer Palette zusammengefasst, aber das ist das Beste, was ich bekommen kann (74 Farben).Eine andere Lösung ist: Nehmen Sie alle R-Farben von Grafikgeräten und probieren Sie sie aus. Ich habe Graustufen entfernt, da sie zu ähnlich sind. Dies ergibt 433 Farben
mit 200 Farben
n = 200
:quelle
col
entsprechende Farbnamen umzuwandeln ?col
meinst du? Dascolor
von Grafikgeräten hat Namen. Wenn Sie im Allgemeinen meinen, haben nicht alle Hex-Codes entsprechende Farbnamen (es gibt nur 433 Farben in,grDevices
aber viele weitere Hex-Codes)col=sample(col_vector, n)
aus demRColorBrewer
Paket in Ihrem Code-Snippet. Beispiel: So finden Sie die Farbnamen für#B3E2CD, #E78AC3, #B3DE69
verfügbar untersample(col_vector,3)
. Alternativ finden Sie alle Hex-Codes, die vonbrewer.pal
function mit ihren Farbnamen angegeben wurden.RColorBrewer
Paletten nicht vongrDevices
Farben abgeleitet sind, deren Namen zugeordnet sind, sondern nur Hex-Codes sind, können Sie dies meines Wissens nicht mitRColorBrewer
Paletten tun , auch nicht mit qualitativen.Hier sind einige Optionen:
Schauen Sie sich die
palette
Funktion an:Und die
colorRampPalette
Funktion:Schauen Sie sich das
colorBrewer
Paket (und die Website ) an. Wenn Sie unterschiedliche Farben wünschen, wählen Sie auf der Site die Option Abweichend . Beispielsweise,Die I want hue -Website bietet viele schöne Paletten. Wählen Sie erneut die gewünschte Palette aus. Sie können beispielsweise die RGB-Farben von der Site abrufen und Ihre eigene Palette erstellen:
quelle
I want hue
ist eine tolle Website. Genau das will ich. Geben Sie anhand einer bestimmten Zahl eine Palette mit der Anzahl der Farben an. aber können wir es in R automatisch tun?i want hue
es eine API gäbe, mit der es automatisch abgefragt werden könnte (vielleicht schon - ich habe nicht lange gesucht)i want hue
, hier . Die Effizienz könnte verbessert werden (z. B. durch Speichern von Farbmustern als Datenobjekte), aber die allgemeine Idee ist da. (Laden mitdevtools::source_gist('45b49da5e260a9fc1cd7')
)Sie können das
randomcoloR
Paket auch ausprobieren :Sie können sehen, dass bei der Visualisierung in einem Kreisdiagramm eine Reihe sehr unterschiedlicher Farben ausgewählt werden (wie in anderen Antworten hier vorgeschlagen):
Dargestellt in einem Kreisdiagramm mit 50 Farben:
quelle
unname(distinctColorPalette(n))
, um diese Arbeit mit ggplot zu machen. Ich denke, ggplot braucht einen unbenannten Vektor.col_vector <- unname(distinctColorPalette(n))
und dann... + scale_color_manual(values=col_vector) ...
Keine Antwort auf die Frage von OP, aber es ist erwähnenswert, dass es die gibt
viridis
Paket gibt, das gute Farbpaletten für sequentielle Daten enthält. Sie sind wahrnehmungsmäßig einheitlich, farbenblind und sicher und druckerfreundlich.Um die Palette zu erhalten, installieren Sie einfach das Paket und verwenden Sie die Funktion
viridis_pal()
. Es stehen vier Optionen "A", "B", "C" und "D" zur AuswahlEs gibt auch einen ausgezeichneten Vortrag, der die Komplexität guter Farbkarten auf YouTube erklärt:
Eine bessere Standard-Farbkarte für Matplotlib | SciPy 2015 | Nathaniel Smith und Stéfan van der Walt
quelle
Sie können
colorRampPalette
von Basis oderRColorBrewer
Paket verwenden:Mit
colorRampPalette
können Sie Farben wie folgt angeben:Alternativ können Sie auch Hex-Codes angeben:
Mit können
RColorBrewer
Sie Farben aus bereits vorhandenen Paletten verwenden:RColorBrewer
Weitere verfügbare Paletten finden Sie im Paket. Hoffe das hilft.quelle
brewer.pal
. Es ist jedoch auf 9 Farben begrenzt. Ich habe tatsächlich mehr als 9 Kategorien. Die ersten Alternativen erzeugen Verlaufsfarben, die nicht so ausgeprägt sind, wie ich es möchte.Ich würde empfehlen, eine externe Quelle für große Farbpaletten zu verwenden.
http://tools.medialab.sciences-po.fr/iwanthue/
hat einen Dienst, um jede Größe der Palette nach verschiedenen Parametern und zusammenzustellen
/graphicdesign/3682/where-can-i-find-a-large-palette-set-of-contrasting-colors-for-coloring-many-d/3815
Erläutert das allgemeine Problem aus Sicht der Grafikdesigner und gibt viele Beispiele für verwendbare Paletten.
Um eine Palette aus RGB-Werten zu erstellen, müssen Sie nur die Werte in einen Vektor kopieren, wie z.
quelle
Ich habe eine Website mit einer Liste von 20 verschiedenen Farben gefunden: https://sashat.me/2017/01/11/list-of-20-simple-distinct-colors/
Sie können es versuchen!
quelle
n
unverwechselbare Farben zu erzeugen, nicht um eine Reihe definierter Farben. Versuchen Sie, Ihre Antwort zu aktualisierenSie können eine Reihe von Farben wie folgt generieren:
Diese Farben sind so unterschiedlich wie möglich. Für diese ähnlichen Farben bilden sie einen Farbverlauf, sodass Sie die Unterschiede zwischen ihnen leicht erkennen können.
quelle
Nach meinem Verständnis hängt die Suche nach bestimmten Farben mit der effizienten Suche aus einem Einheitswürfel zusammen, wobei drei Dimensionen des Würfels drei Vektoren entlang der roten, grünen und blauen Achse sind. Dies kann vereinfacht werden, um in einem Zylinder zu suchen (HSV-Analogie), in dem Sie Sättigung (S) und Wert (V) festlegen und zufällige Farbtonwerte finden. Es funktioniert in vielen Fällen und sehen Sie dies hier:
https://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatic/
In R,
Eine alternative Möglichkeit besteht darin, das R-Paket "einheitlich" zu verwenden: https://cran.r-project.org/web/packages/uniformly/index.html
und diese einfache Funktion kann unverwechselbare Farben erzeugen:
Man kann sich bei der Rastersuche eine etwas komplexere Funktion vorstellen:
Überprüfen Sie diese Funktionen durch:
Beachten Sie jedoch, dass das Definieren einer bestimmten Palette mit vom Menschen wahrnehmbaren Farben nicht einfach ist. Welcher der oben genannten Ansätze unterschiedliche Farbsätze erzeugt, muss noch getestet werden.
quelle
Sie können das Polychrome- Paket für diesen Zweck verwenden. Es erfordert nur die Anzahl der Farben und einige
seedcolors
. Beispielsweise:Weitere Informationen zu diesem Paket finden Sie unter https://www.jstatsoft.org/article/view/v090c01 .
quelle