我有一个包含语言,其经度和纬度以及特征值(类别1,类别2或两者-在图中分别标记为红色,蓝色和绿色)的数据库。每种语言最多可能有三个点,并且自然地,两个语言点可能彼此非常靠近。
name longitude latitude sp_sum
1 Modern Armenian 45 40 both
2 Modern Armenian 45 40 both
3 Modern Armenian 45 40 spatial
4 Dieri 138 -28.1667 both
5 Dieri 138 -28.1667 both
6 Finnish 25.5577 64.7628 non-spatial
7 Crimean Tatar 28.1418 43.8398 spatial
8 Ese Ejja -67.515 -11.7268 non-spatial
9 Makhuwa 38.8052 -14.8509 non-spatial
...
我正在使用R包ggplot2(这是我最熟悉的包,因此我很乐意继续使用它-但也欢迎使用其他解决方案)。这是上一次尝试的结果(代码:参见下面1):
对于每个点,我希望(粗略的)位置以及值仍然可见。(如果一种语言有多个要点,则可以将它们组合在一起。)
有没有办法...
- ...恰好将点移到一边,以至于不会过度绘图(比使用geom_jitter随机的少- 例如,在beeswarm程序包中有很多这种躲避的方法)?
- ...和/或在必须移动某个点时使其指向某点的原始位置?
- ...或以仍然清晰的方式组合近距离点(可能存在一种使用合并的有效技术,即stat_bin *或类似效果的东西)?
...还是要创建一个像在网站上看到的那样仍然可以包含在pdf中的“交互式情节”(我也在这里考虑动画和光泽之类的软件包的功能)?例如,在wals.info上看起来像这样:
从这里的上一篇文章中,我知道directlabels包可以移动标签,但是我还没有找到一种使它也移动点的方法。
随时要求澄清!
注意:我知道有很多有关过度绘图的问题,但是我研究过的所有问题似乎都有不同的目的(即统计目的)(我不声称已阅读全部内容,因此我d当然也很乐意接受链接)。我将尝试列出我知道并且可能相关的那些帖子(-从我阅读的内容来看,这些都不能完全回答我的问题。)
1以下代码行从上方创建了裁剪。
library(OpenStreetMap)
library(ggplot2)
data <- read.csv(header = T, sep = ",", dec = ".", quote= "'",
text = "'','name','longitude','latitude','sp_sum'
'1','Modern Armenian',45,40,'both'
'2','Modern Armenian',45,40,'both'
'3','Modern Armenian',45,40,'spatial'
'4','Dieri',138,-28.1667,'both'
'5','Dieri',138,-28.1667,'both'
'6','Finnish',25.5577,64.7628,'non-spatial'
'7','Crimean Tatar',28.1418,43.8398,'spatial'
'8','Sochiapam Chinantec',-96.6079,17.7985,'non-spatial'
'9','Ese Ejja',-67.515,-11.7268,'non-spatial'
'10','Makhuwa',38.8052,-14.8509,'non-spatial'
'11','Mualang',111.077,0.31083,'non-spatial'
'12','Martuthunira',116.607,-20.9294,'non-spatial'
'13','Evenki',108.626,53.85,'both'
'14','Afrikaans',30,-22,'both'
'15','Male (Ethiopia)',36.9892,5.91975,'both'
'16','Manchu',126.557,47.3122,'both'
'17','Dime',36.3329,6.20951,'non-spatial'
'18','Koorete',37.8679,5.80545,'non-spatial'
'19','Wolaytta',37.7537,6.32668,'both'
'20','Dizin',35.5763,6.1405,'both'")
map <- openproj(openmap(c(85, -179.9), c(-60, 179.9), zoom = 2, type = "nps"))
plot <- autoplot(map) +
geom_point(data = data, aes(x = longitude, y = latitude),
color = "white", alpha = 0.8, size = 8) +
geom_point(data = data, aes(x = longitude, y = latitude, color = sp_sum),
alpha = 0.3, size = 4)
plot