web-dev-qa-db-ja.com

ggplot2散布図の重複を避けるためにテキストをジッターする方法は?

Ggplot2でテキストラベルの散布図のクリーンバージョンを作成したいと思います。目標は、約25のアイテムに関連付けられた増加する値を視覚的に表すことです。すでに「position_jitter」を使っていますが、もっと上手くできるかな。

ここにいくつかの模擬データがあります:

title <- rep("A Really Rather Long Text Label", 25)
value <- runif(25, 1,10)
spacing <- seq(1:25)
df <- data.frame(title, value, spacing, stringsAsFactors = FALSE)

そして、これがグラフを生成するコードです:

library(ggplot2)
myplot <- ggplot(data=df, aes(x=spacing, y=value, label = title)) +
geom_text(aes(colour = value),
    size = 2.5, fontface = "bold",
    vjust = 0,
    position = position_jitter(width=5, height=0)) +
theme_bw() +
scale_x_continuous(limits = c(-5, 30))+
scale_colour_gradient(low = "#6BAED6", high = "#08306B") +
theme(axis.title.x = element_blank(),
      axis.ticks = element_blank(),
      axis.text.x = element_blank(),
      legend.position = "none")
myplot

適切なサイズのグラフには、このテキストすべてに十分なスペースがあります-テキストが水平方向に必要な範囲まで自由に移動できる限り、!ポイントは各テキストラベルに関連付けられたy値を表示することなので、垂直方向にジッターを設定しません。

グラフは、ggplotコマンドを実行するたびに少しずつ異なって表示されます-ときどき、ジッタリングの結果が他の時間よりも優れていることがあります。しかし、私は体系的にラベルが重複するのを防ぐ方法を見つけていません。

個々のアイテムを手動で移動せずに、テキストの水平方向の配置をクリーンアップする方法についての提案があれば感謝します。このタイプの視覚表現を改善する方法に関する他のヒントも聞いていただければ嬉しいです。

35
user1257313

FFieldパッケージをご覧ください

install.packages("FField", type = "source")
install.packages("ggplot2")
install.packages("gridExtra")
library(FField)
FFieldPtRepDemo()

(この投稿から https://stats.stackexchange.com/a/62856

5
Jonas