2016-01-06 20 views
5

R'de arsa kullanılarak bir çubuk grafiği oluşturmaya çalışıyorum. Çubuklar değere göre sıralanmalı ve farklı renklere sahip olmak istediğim iki çubuk çubuğu var. Ancak, rengi eklediğimde, çubuklar gruplara ayrılarak iki gruba ayrılır. Onları bir grupta nasıl tutabileceğime dair bir ipucu var mı?Çizgisel çubuk grafikte renk

plotting.df = data.frame(names=c("a", "b", "c", "d", "e", "f", "g"), 
         value=c(1.9468656, 1.3867055, 1.0433950, 0.8949743, 0.3714826, 0.3605037, 0.3003954), 
         label=c("y", "n", "y", "n", "n", "n", "n"), 
         color=c("red", "black", "red", "black", "black", "black", "black")) 
plotting.df$names = factor(as.character(plotting.df$names), levels=as.character(plotting.df$names)[order(plotting.df$value, decreasing=TRUE)]) 
plotting.df = plotting.df[order(plotting.df$value, decreasing=TRUE), ] 
plot_ly(plotting.df, type="bar", x=names, y=value, 
     name="Comp a", 
     hoverinfo="text", text=c(paste("Name:", plotting.df$names, 
             "<br>Value:", signif(plotting.df$value, digits=3), 
             "<br>Label:", plotting.df$label)), 
     color=color) 

Ve bir örnek:

enter image description here

+1

ilginç bir soru, ama sizin runif() kullandığınız için tohumunuzu ayarlayamazsınız çünkü arsayı yeniden oluşturamayacağımız için – MLavoie

+0

İyi nokta. Runif'i gerçek değerlerle değiştirdim. Bu durumda kesin değerler önemli değil. –

cevap

1

Bir kesmek biraz ama bu 'çözer' belirli bir konu sorulduğunda

İşte benim kod.

veri çerçevesi ile başlayan:

library(tidyr) 

    plotting.df2 <- plotting.df %>% 
     spread(names, value, fill = NA) %>% 
     gather("names", "value", a:g) 

    plot_ly(plotting.df2, 
     type="bar", 
     x=names, 
     y=value, 
     name="Comp a", 
     hoverinfo="text", 
     color=color, 
     text=c(paste("Name:", plotting.df$names, 
        "<br>Value:", signif(plotting.df$value, digits=3), 
        "<br>Label:", plotting.df$label))) %>% 
    layout(barmode = "stack") 

Temel olarak, bu yöntem UA ile dolu adı ve bir renk, her kombinasyon için, bir veri noktası yaratmaktadır. Sonra bunlar arsada yığılmış.

Daha sonra veri değerlerini yığınlamak istiyorsanız, bu 'çözüm' muhtemelen işe yaramaz, ancak umarım bu kesmek, en azından geçici olarak benzer bir delikten birini çıkarır.

DÜZENLEME: Bu örnekte, plotly 3.x.x kullanılabilir. plotly 4.x.x veya üstünü kullanırsanız, bu kod olduğu gibi çalışmayabilir. Daha fazla bilgi için buraya bakın: https://www.r-bloggers.com/upgrading-to-plotly-4-0-and-above/

+0

Çözüm için teşekkürler. Aslında, '%>% düzeni (barmode = "yığın") 'olmadan da aynı görünüyor. Ama şimdilik başka bir veri biriktirmem gerekmiyor –