การเผชิญหน้ากับชุดข้อมูลหลายชุดใน ggplot: วิธีการตั้งค่าสเกล

ฉันกำลังพยายามทำบางสิ่งที่ดูเหมือนว่าจะค่อนข้างตรงไปตรงมาใน ggplot ฉันสงสัยว่าฉันไม่ได้ค้นหาคำที่ถูกต้องจึงไม่มีอะไรปรากฏขึ้น โดยพื้นฐานแล้วฉันมีข้อมูลจากเฟรมข้อมูลหนึ่งและข้อมูลแผนที่ในอีกเฟรมหนึ่ง ฉันต้องการให้ฟังก์ชัน facet_wrap ละเว้นข้อมูลในกรอบข้อมูลแผนที่เมื่อพิจารณามาตราส่วนที่เหมาะสม นี่คือโค้ดบางส่วนที่ทำซ้ำได้:

mapdata <- map_data("world")
df1 <- data.frame(category="A", lon=rnorm(20, -160, 3), lat=rnorm(20, 55, 3))
df2 <- data.frame(category="B", lon=rnorm(20, -130, 3), lat=rnorm(20, 52, 3))
df <- rbind(df1, df2)
g <- ggplot() + geom_point(data=df, aes(lon, lat)) + facet_wrap("category", scales="free")

Points without the mapแต่ตอนนี้หากฉันพยายามเพิ่มแผนที่ลงในแต่ละด้าน มันจะใช้ช่วงจากข้อมูลทั้งสอง ชุด

g + geom_polygon(data=mapdata, aes(x=long, y=lat, group=group))

จุดที่มีแผนที่

ฉันจะบอก ggplot ให้ใช้เฉพาะ data frame df เมื่อคำนวณขีด จำกัด ได้อย่างไร โดยพื้นฐานแล้วฉันต้องการให้แผนย่อยอยู่ตรงกลางของจุดต่างๆ แต่มีแผนที่ที่แสดงเพื่อให้เห็นภาพว่าจุดเหล่านั้นอยู่ที่ไหน ข้อเสนอแนะใด ๆ ที่จะได้รับการชื่นชมอย่างมาก.


person Cole Monnahan    schedule 31.03.2014    source แหล่งที่มา
comment
ฉันกำลังพยายามคิดถึงบางสิ่งที่ดีกว่าการสับเซ็ตข้อมูลแผนที่ของคุณหรือใช้ coord_cartesian แต่ฉันจัดการกับแผนที่บ่อยครั้ง   -  person joran    schedule 01.04.2014


คำตอบ (1)


ปัญหาได้รับการแสดงความคิดเห็นก่อนหน้านี้ ดังนั้นจึงไม่มีวิธีการดั้งเดิมในการดำเนินการดังกล่าว การตั้งค่าย่อยอาจเป็นทางออกที่ดีที่สุดของคุณที่นี่ เพิ่มหมวดหมู่ให้กับ mapdata และ facet_wrap ก็ฉลาดพอที่จะแยกขีดจำกัดสำหรับหมวดหมู่ต่างๆ

mapdata$category <- ifelse(
  findInterval(mapdata$lon, range(df1$lon)) == 1 & 
    findInterval(mapdata$lat, range(df1$lat)) == 1, 
  "A",
  ifelse(
    findInterval(mapdata$lon, range(df2$lon)) == 1 & 
      findInterval(mapdata$lat, range(df2$lat)) == 1,
    "B",
    NA)
)

g + geom_polygon(data=mapdata[!is.na(mapdata$category), ], aes(x=long, y=lat, group=group))

ป้อนคำอธิบายรูปภาพที่นี่

จำเป็นต้องมีการทำงานเพิ่มเติมบางอย่างเพื่อให้สิ่งนี้ดูสวยงาม (อาจเป็นพื้นที่ที่ใหญ่กว่าในการย่อย) แต่คุณเข้าใจแนวคิดนี้

person tonytonov    schedule 02.04.2014
comment
tonytonov -- ขอบคุณสำหรับลิงค์นี้ ฉันจะลองทำตามคำแนะนำของคุณและหวังว่าจะมีวิธีแก้ปัญหาแบบเนทิฟในอนาคต - person Cole Monnahan; 03.04.2014