2016-08-03 26 views
0

Ich möchte die Farben in einem plotly Grundstück anpassen. Dies funktioniert gut für kontinuierliche Variablen und Skalen gemäß der docs:Benutzerdefinierte diskrete Farbskala in plotly

library(plotly) 

plot_ly(iris, x = Petal.Length, y = Petal.Width, 
      color = Sepal.Length, colors = c("#132B43", "#56B1F7"), 
      mode = "markers") 

Wenn ich das Argument machen diskrete einzufärben (Zeichen oder Faktor), aber das funktioniert noch, aber wirft eine Warnung:

> plot_ly(iris, x = Petal.Length, y = Petal.Width, 
      color = Sepal.Length>6, colors = c("#132B43", "#56B1F7"), 
      mode = "markers") 


Warning message: 
In RColorBrewer::brewer.pal(N, "Set2") : 
    minimal value for n is 3, returning requested palette with 3 different levels 

Wie mache ich das richtig?

Antwort

4

Dies ist kein Problem, sondern ein Designmerkmal von ColorBrewer (und dem zugehörigen RColorBrewer Paket). Sie werden feststellen, dass die Warnung verschwindet, wenn Sie Faktoren mit gleich oder mehr als drei Ebenen, z. B. color zuweisen.

plot_ly(iris, x = Petal.Length, y = Petal.Width, 
     color = cut(Sepal.Length, 3), colors = "Set1", 
     mode = "markers") 

Dies liegt daran, ColorBrewer die minimale Anzahl von Datenklassen drei ist (was man von http://colorbrewer2.org/ sehen kann, wo nicht weniger als drei Klassen wählen). Zum Beispiel in ?brewer.pal (die Funktion von plotly bezeichnet), sagt, dass es speziell

All aufeinanderfolgenden Paletten in Variationen von 3 unterschiedlichen Werten bis zu 9 verschiedenen Werten zur Verfügung stehen.

[...]

Für qualitative Paletten, die niedrigste Anzahl unterschiedlicher Werte verfügbar ist immer 3

Seit build_plotly() (die Funktion plotly() Anrufe intern) ruft immer brewer.pal() (siehe Linie 474 here), ist es nicht möglich, dies zu beheben, ohne die build_plotly()-Funktion neu zu schreiben, um brewer.pal() mit weniger als 3 Datenklassen nicht aufzurufen.

In der Zwischenzeit um die Warnung zu deaktivieren, den Plot Ausgang zu einem Objekt zuweisen und wickeln die print(object) Anweisung in suppressWarnings() wie folgt aus:

plotly_plot <- plot_ly(iris, x = Petal.Length, y = Petal.Width, 
     color = Sepal.Length>6, colors = c("#132B43", "#56B1F7"), 
     mode = "markers") 

suppressWarnings(print(plotly_plot)) 
+0

Sinn macht. Einen Fehlerbericht hierüber abgelegt: https://github.com/openensci/plotly/issues/670 – RoyalTS

+0

Kann ich diese Warnung in der Zwischenzeit irgendwie loswerden? Ich habe versucht, es zu unterdrücken, aber es scheint es an der falschen Stelle zu unterdrücken, wie es immer noch zeigt. Ich habe auch versucht, dem Faktor eine unbenutzte dritte Ebene hinzuzufügen. Aber das scheint auch nicht zu funktionieren. – RoyalTS

+0

Ich habe meine Antwort entsprechend aktualisiert – Felix