R ggmap,过度绘制,点相互覆盖

R ggmap,过度绘制,点相互覆盖,r,ggmap,R,Ggmap,我对过度策划有意见 情况是这样的:我有一些带有坐标和不同地名的数据,有些地方在同一个构建中,所以我有几个地名的相同坐标。如何策划这样他们就不会互相掩护了?我尝试了不同的形状,最好的选择是分散这些点,或者用很少的颜色绘制一个点?但我不知道怎么做。我将感谢任何帮助 代码示例: require(rgdal) require(ggmap) require(maptools) require (plyr) swd <- structure(list(nazwa = structure(c(8L,

我对过度策划有意见

情况是这样的:我有一些带有坐标和不同地名的数据,有些地方在同一个构建中,所以我有几个地名的相同坐标。如何策划这样他们就不会互相掩护了?我尝试了不同的形状,最好的选择是分散这些点,或者用很少的颜色绘制一个点?但我不知道怎么做。我将感谢任何帮助

代码示例:

require(rgdal)
require(ggmap)
require(maptools)
require (plyr)

swd <- structure(list(nazwa = structure(c(8L, 8L, 9L, 7L, 7L, 7L, 3L, 
                                   5L, 6L, 4L, 2L, 2L, 1L), .Label = c("ODDZIAŁ CHIRURGII ONKOLOGICZNEJ", 
                                                                       "ODDZIAŁ GINEKOLOGII ONKOLOGICZNEJ", "ODDZIAŁ ONKOLOGICZNY", 
                                                                       "ODDZIAŁ ONKOLOGII I HEMATOLOGII DZIECIĘCEJ", "ODDZIAŁ ONKOLOGII KLINICZNEJ CHEMIOTERAPII", 
                                                                       "ODDZIAŁ RADIOTERAPII", "PORADNIA CHIRURGII ONKOLOGICZNEJ", "PORADNIA ONKOLOGICZNA", 
                                                                       "PORADNIA RADIOTERAPII"), class = "factor"), miasto = structure(c(8L, 
                                                                                                                                         8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L), .Label = c("DZIAŁDOWO", 
                                                                                                                                                                                                     "ELBLĄG", "EŁK", "GIŻYCKO", "MRĄGOWO", "NOWE MIASTO LUBAWSKIE", 
                                                                                                                                                                                                     "OLECKO", "OLSZTYN", "OSTRÓDA", "PISZ", "SZCZYTNO"), class = "factor"), 
               dom = structure(c(17L, 5L, 17L, 17L, 8L, 18L, 5L, 17L, 17L, 
                                 20L, 17L, 19L, 17L), .Label = c("BARANKI 24", "GNIEŹNIEŃSKA 2", 
                                                                 "GOŁDAPSKA 1", "HENRYKA SIENKIEWICZA 4", "JAGIELLOŃSKA 78", 
                                                                 "JANA III SOBIESKIEGO 3 C/44", "KONOPNICKIEJ 1", "KOPERNIKA 30", 
                                                                 "KOŚCIUSZKI 30", "KRÓLEWIECKA 146", "KRÓLEWIECKA 146 146", 
                                                                 "LEŚNA 1", "MICKIEWICZA 10", "MICKIEWICZA 14", "OSEDLE MAZURSKIE 33 A", 
                                                                 "WARSZAWSKA 41", "WOJSKA POLSKIEGO 37", "ŻOŁNIERSKA 16B", 
                                                                 "ŻOŁNIERSKA 18", "ŻOŁNIERSKA 18 A"), class = "factor"), Lat = c(53.794077, 
                                                                                                                                 53.80182, 53.794077, 53.794077, 53.7827025, 53.7688275, 53.80182, 
                                                                                                                                 53.794077, 53.794077, 53.7696245, 53.794077, 53.7698809, 
                                                                                                                                 53.794077), Long = c(20.483249, 20.508952, 20.483249, 20.483249, 
                                                                                                                                                      20.4918876, 20.4903438, 20.508952, 20.483249, 20.483249, 
                                                                                                                                                      20.4927874, 20.483249, 20.492049, 20.483249)), .Names = c("nazwa", 
                                                                                                                                                                                                                "miasto", "dom", "Lat", "Long"), row.names = c(1L, 2L, 12L, 13L, 
                                                                                                                                                                                                                                                               14L, 15L, 23L, 25L, 27L, 29L, 30L, 31L, 32L), class = "data.frame")
polska <- get_googlemap(
  center =c('Olsztyn, Polska'), 
  zoom=12, 
  maptype="roadmap" ,
  scale = 2 
  ,color = "bw"
)
kontury<- ggmap(polska)




punkty <- kontury+ geom_point( aes(x=Long, y=Lat, color=nazwa, shape=nazwa )
                               ,data=subset(swd,(  nazwa=='ODDZIAŁ GINEKOLOGII ONKOLOGICZNEJ'|
                                                     nazwa=='PORADNIA CHIRURGII ONKOLOGICZNEJ'|
                                                     nazwa=='ODDZIAŁ ONKOLOGII KLINICZNEJ CHEMIOTERAPII'|
                                                     nazwa=='PORADNIA ONKOLOGICZNA'|
                                                     nazwa=='ODDZIAŁ RADIOTERAPII'& 
                                                     miasto=="OLSZTYN"))
                               ,size=7

)+ 

  guides(fill  = guide_legend(ncol = 1)) + 
  theme(legend.position="right") +
  scale_shape_manual(values = c(15,16,17,18,19,20), name="Symbol")

print(punkty) 
require(rgdal)
需要(ggmap)
需要(地图工具)
需要(plyr)
swd尝试代替
geom_点
。您可以指定
宽度
高度
来调整抖动量

从文件中:

宽度
垂直和水平抖动量。抖动被添加到 正方向和负方向都有,所以总排列是两倍 此处指定的值。如果省略,则默认为默认值的40% 数据分辨率:这意味着抖动值将占80% 暗含垃圾桶的数量。分类数据在整数上对齐,因此 宽度或高度为0.5将分散数据,因此无法 请参见类别之间的区别

高度
垂直荷载量 和水平抖动。抖动以正和负两种方式添加 负方向,因此总排列是指定值的两倍 在这里如果省略,则默认为数据分辨率的40%:此 表示抖动值将占据80%的隐含存储单元。 分类数据在整数上对齐,因此 0.5将分散数据,因此无法看到类别之间的区别

在回答您评论中的后续问题时:假设您有一些数据,其中的一列(或多列)可能在观察中重复,也可能不重复:

library(data.table)
set.seed(123)
x <- data.table(a=sample(1:5,10,replace=T))
setkey(x,a)

> x
    a
 1: 1
 2: 2
 3: 3
 4: 3
 5: 3
 6: 3
 7: 4
 8: 5
 9: 5
10: 5
让我们添加一列来列举用于绘图的观察结果:

pts[,b:=.I]
> pts
    a is.unique  b
 1: 1      TRUE  1
 2: 2      TRUE  2
 3: 3     FALSE  3
 4: 3     FALSE  4
 5: 3     FALSE  5
 6: 3     FALSE  6
 7: 4      TRUE  7
 8: 5     FALSE  8
 9: 5     FALSE  9
10: 5     FALSE 10
现在我们可以做一个图,根据数据是否会被过度绘制(请注意,这不是字面上的数据,因为我在这里使所有x值不同,但我认为这很容易可视化),正如我在评论中所建议的:

ggplot(pts,aes(x=b,y=a)) +
    geom_point(data=pts[(is.unique)],color="blue") +
    geom_jitter(data=pts[!(is.unique)],color="red")

请注意,只有唯一值(蓝色)精确地落在晶格点上。我们可以调整抖动,例如,仅垂直调整抖动点,默认情况下,调整的抖动小于:

ggplot(pts,aes(x=b,y=a)) +
    geom_point(data=pts[(is.unique)],color="blue") +
    geom_jitter(data=pts[!(is.unique)],color="red",width=0,height=.2)

顺便说一句,不请自来的风格挑剔:如果你给你的颜色/填充和形状比例取相同的名字,它们会结合在一起,你就可以有一个更好看的传奇。例如:

ggplot(pts,aes(x=b,y=a,color=is.unique,shape=is.unique)) +
     geom_point(data=pts[(is.unique)]) +
     geom_jitter(data=pts[(!is.unique)]) +
     scale_color_manual(values=c("red","blue"),name="Unique a?") +
     scale_shape_manual(values=c(15,16),name="Unique a?")

但是我会调整所有的点,不仅仅是一个具有相同坐标的点,为几个地名,而且我有更多的点在坐标上具有单个名称。在这个数据示例中,我只提出了问题,原始数据要大得多。还是我错了?我马上试试,然后写下我看到的。如果这是一个大问题,你可以将你的数据分成两个
data.frames
,或者通过添加一列用作指示符,并使用
data
参数到
geom_point
),然后做两个层:一个层用于具有
geom_point
的唯一数据,其中一个是带有
geom_jitter
(或相当于
width/height=0
)的过量拼接数据。我已经添加了一个虚拟的MWE,您应该能够修改以获得结果。非常感谢您的努力,您的示例非常有用。我会尝试一下,我会把你的想法加入我的剧本。谢谢!:)你知道为什么我不能在地图上使用ggplot吗?当我尝试执行此操作时,我得到一个错误:
p+o中的错误:二进制运算符的非数字参数另外:警告消息:不兼容的方法(“+.gg”,“Ops.data.frame”)用于“+”
当我这样做时,它会起作用:
konturyal因此,您可以通过在最高级别的命令中尽可能多地使用通用美学来帮助避免错误并简化代码。因此,例如,您可能希望执行类似于
ggmap(polska,aes(x=Long,y=Lat,color=nazwa,shape=nazwa))+geom_点(data=…)+geom_抖动(data=…)
的操作,而不是在每个
geom
中重复
aes。
ggplot(pts,aes(x=b,y=a)) +
    geom_point(data=pts[(is.unique)],color="blue") +
    geom_jitter(data=pts[!(is.unique)],color="red",width=0,height=.2)
ggplot(pts,aes(x=b,y=a,color=is.unique,shape=is.unique)) +
     geom_point(data=pts[(is.unique)]) +
     geom_jitter(data=pts[(!is.unique)]) +
     scale_color_manual(values=c("red","blue"),name="Unique a?") +
     scale_shape_manual(values=c(15,16),name="Unique a?")