2017-10-18 16 views
1

私は40以上の因子レベルのデータフレームを持っています。レベルごとに異なるシェイプを割り当てたいと思います。しかしながら、scale_shapes_tableggplot2に示されるように、私はそれらのうちのわずか26個を割り当てることができ、いくつかは!,",#などと割り当てることができる。scale_shape_manualに40シェイプ以上を割り当てる

enter image description here

は、しかし、私はpythonでまたはJMPあなたは多くの形状を割り当てることができることを知っている(asteriks、左三角形、直角三角形、四角形などのように)。 ggplot2でも可能ですか?

data=data.frame(gr=seq(1,40), x1=runif(40), y1=runif(40)) 
library(ggplot2) 
ggplot(data=data,aes(x=x1,y=y1,shape=factor(gr),col=factor(gr)))+ 
    geom_point(alpha = 0.3,size=4,stroke=1.4) + 
    scale_shape_manual(values=c(0:40)) 

enter image description here

+5

あなたべき非常に多くの形を使用することが効果的な視覚化であるかどうかを検討してくださいおそらく、あなたのデータはより少ない数のカテゴリーに分けることができますか?ファセットも考慮する。 – neilfws

+0

@neilfwsはい私はそれを考え、できるだけ多くの形が必要です:) – Alexander

+2

@Alexanderあなたは十分ではないと考えました。人間の脳が40の形を区別することは非常に困難で時間がかかります。あなたは悪い視覚化を作り出しています。 – Roland

答えて

5

の大規模なセットシンボルはemojifontパッケージを使用して入手できますeをFont Awasomeで使用してください(hereの完全なリストを参照)。詳細はhereです。

library(ggplot2) 
library(emojifont) 
set.seed(1234) 
symbls <- c('fa-github', 'fa-binoculars', 'fa-twitter', 'fa-android', 'fa-coffee', 
'fa-cube', 'fa-ambulance','fa-check','fa-cutlery','fa-cogs','fa-dot-circle-o','fa-car', 
'fa-building','fa-fire', 'fa-flag','fa-female','fa-gratipay','fa-heart','fa-magnet', 
'fa-lock','fa-map','fa-puzzle-piece','fa-shopping-cart','fa-star','fa-sticky-note', 
'fa-stop-circle-o','fa-volume-down','fa-anchor', 'fa-beer','fa-book','fa-cloud', 
'fa-comment','fa-eject','fa-chrome','fa-child','fa-bomb', 'fa-certificate', 
'fa-desktop','fa-fire-extinguisher','fa-diamond') 
idx <- order(symbls) 
fa <- fontawesome(symbls) 
k <- length(fa) 
data=data.frame(gr=factor(fa, levels=fa[idx]), x1=runif(k), y1=runif(k)) 
data$gr <- factor(data$gr, levels=fa[idx]) 

ggplot(data, aes(x1, y1, colour=gr, label=gr)) + 
    xlab(NULL) + ylab(NULL) + geom_point(size=-1) + 
    geom_text(family='fontawesome-webfont', size=6, show.legend=FALSE) + 
    theme(legend.text=element_text(family='fontawesome-webfont')) + 
    scale_colour_discrete("Points",guide=guide_legend(override.aes=list(size=4))) 

enter image description here

警告:あなたはRstudio内のコードを使用したい場合は、次のように最初のグラフデバイスを再割り当てする(詳細はhereを与えられている):

devtools::install_github("coatless/balamuta") 
library("balamuta") 
external_graphs() 
+0

答えに感謝します。このemjifontには数学のsyboldもありますか?それらを見つけることができませんでしたか?または、ベースシンボルは同じですが、形状は異なっていますか? – Alexander

+0

rstudioで動作するはずのコードが必要です:) – Alexander

+0

@Alexander Rstudioを使用する必要がある場合は、自分の投稿の更新を参照してください。プロットがRstudioに表示されない場合は、このソリューションを使用します。 –

2

40点がより良い仕事を区別するのに十分な別個の色で5つのまたは10の異なる形状の組み合わせを使用してか?私は、これらを40個の要素を視覚的に区別しやすくすることが、珍しいシンボルを使用/使用するよりも容易であると考えています。

ggplot(data=data,aes(x=x1,y=y1, shape=factor(gr), col=factor(gr)))+ 
geom_point(alpha = 0.5, size=4, stroke=1.4) + 
scale_shape_manual(values=rep(c(0:2,5:6,9:10,11:12,14), times=4)) 

enter image description here

や色を埋める取る5つのユニークな形状を活用します。

ggplot(data=data,aes(x=x1,y=y1, shape=factor(gr), fill=factor(gr), col=factor(gr)))+ 
geom_point(alpha = 0.5, size=4, stroke=1.4) + 
scale_shape_manual(values=rep(c(21:25), times=8)) 

enter image description here

3

たぶん形状を比較するよりも数を見つけることが容易にggrepelを、使用してラベルとしてGRを使用します。

library(ggrepel) 

ggplot(data = data, aes(x = x1, y = y1, label = gr))+ 
    geom_point() + 
    geom_label_repel() 

enter image description here

+1

ニースは、まだ非常に乱雑です。技術的に可能であれば、インタラクティブなグラフを使用して、1つまたは2つのカテゴリに色を割り当てて強調表示させることができます。もちろん、私は40のカテゴリーへのマッピングが重要であるとは疑いがあります。カテゴリを集約しようとするかもしれません。 – Roland

+0

@Roland「光って」私のポストを読むとき私の心に来たが、私はOPは静的なプロットが欲しいと思う。はい、これは色のグループ化が必要です。 – zx8754

関連する問題