我正在使用def load_level(level):
walls = []
players = []
finishes = []
x = y = 0
for row in levels[level]:
for col in row:
if col == "W":
walls.append(Wall((x, y)))
if col == "P":
players.append(Player((x, y)))
if col == "F":
finishes.append(Finish1((x, y)))
if col == "G":
finishes.append(Finish2((x, y)))
if col == "H":
finishes.append(Finish3((x, y)))
if col == "I":
finishes.append(Finish4((x, y)))
x += 40.96
y += 30.72
x = 0
return walls, players, finishes
walls, players, finishes = load_level(currentLevel)
def Menu():
runnin = True
while runnin:
clock.tick(60)
screen.fill(BLACK)
mouseclick = pygame.mouse.get_pressed()
for e in pygame.event.get():
if e.type == pygame.QUIT:
pygame.quit()
sys.exit(0)
if e.type == pygame.KEYDOWN:
if e.key == pygame.K_ESCAPE:
pygame.quit()
sys.exit(0)
for option in options:
if option.rect.collidepoint(pygame.mouse.get_pos()):
option.hovered = True
if mouseclick[0] == 1:
if option.text == "Easy":
global currentlevel, walls, players, finishes
walls, players, finishes = load_level(0)
currentlevel = 0
main()
elif option.text == "Medium":
global currentlevel, walls, players, finishes
walls, players, finishes = load_level(1)
currentlevel = 1
main()
elif option.text == "Hard":
global currentlevel, walls, players, finishes
walls, players, finishes = load_level(2)
currentlevel = 2
main()
elif option.text == "Help":
Help()
else:
runnin = False
else:
option.hovered = False
option.draw()
screen.blit(title_font.render("Amazeing Race", True, GREY), (130, 50))
pygame.display.update()
pygame.quit()
sys.exit(0)
绘制一张挪威地图,其中一个感兴趣的区域用红色矩形突出显示。如果我省略ggplot2
或geom_rect
,则地图绘制得非常快(<1秒)。如果我同时使用 - 我需要 - 它的打印和渲染速度极慢(大约五分钟)。
我认为这与咀嚼有关 - 将矩形投影到新的坐标系上。有没有办法控制这个?
coord_map
使用低分辨率地图可以使地图绘制更快(约10秒)。
答案 0 :(得分:6)
无需诉诸墨卡托近似值:
library(ggplot2)
library(maps)
library(mapdata)
norwaymap <- map_data("worldHires", "Norway")
xlim <- c(5, 10)
ylim <- c(60, 62)
ggplot() +
geom_map(data=norwaymap, map=norwaymap,
aes(long, lat, map_id=region),
color=NA, fill="grey60") +
geom_rect(data=data.frame(),
aes(xmin=xlim[1], xmax=xlim[2], ymin=ylim[1], ymax=ylim[2]),
color="red", fill=NA) +
coord_map(xlim=c(3, 33), ylim=c(57, 72)) +
ggthemes::theme_map()
另一个选择是使用Albers等面积圆锥投影(该区域的典型投影):
ggplot() +
geom_map(data=norwaymap, map=norwaymap,
aes(long, lat, map_id=region),
color=NA, fill="grey60") +
geom_rect(data=data.frame(),
aes(xmin=xlim[1], xmax=xlim[2], ymin=ylim[1], ymax=ylim[2]),
color="red", fill=NA) +
ggalt::coord_proj("+proj=aea +lat_1=60 +lat_2=70 +lon_0=18.37",
xlim=c(3, 33), ylim=c(57, 72)) +
ggthemes::theme_map()
这有一个&#34;缺点&#34;正在投影的矩形(也是墨卡托,那里没有失真)。
无论哪种方式,矩形的神奇之处在于确保你只绘制一个,就像卢克所说的那样。
答案 1 :(得分:4)
使用coord_quickmap
,尤其是annotate
代替geom_rect
来加快速度:
ggplot(norwaymap, aes(x = long, y = lat, group = group)) +
geom_polygon(colour = NA, fill = "grey60") +
annotate(geom="rect", xmin = xlim[1], xmax = xlim[2], ymin = ylim[1],
ymax = ylim[2], colour = "red", fill = NA) +
coord_quickmap(xlim = c(3, 33), ylim = c(57, 72))
geom_rect
在同一个地方过度绘制了几个矩形,annotate
只绘制了一个矩形。您可以在帮助文件中了解coord_map
和coord_quickmap
之间的区别:?coord_quickmap
。