พล็อตแผนภูมิแท่งบนแผนที่ใน R หรือไม่?


14

ฉันใช้plotrixในRการพล็อตของแผนที่ระดับรัฐของสหรัฐ มันมีฟังก์ชั่นที่ยอดเยี่ยมfloating.pieในการวางแผนภูมิวงกลมในแต่ละรัฐ

ฉันสงสัยว่ามีฟังก์ชั่นที่คล้ายกันภายในplotrixแพ็คเกจเพื่อแสดงแผนภูมิแท่งในแต่ละรัฐหรือไม่? (ฉันลองดูที่เอกสารประกอบและฟังก์ชั่นที่จัดการกับแผนภูมิแท่งดูเหมือนจะไม่มีความเป็นไปได้ แต่ฉันแค่อยากจะแน่ใจ) ฉันชอบทำงานในแพ็คเกจพล็อตริกซ์ถ้าเป็นไปได้ แต่รู้สึกอิสระที่จะตั้งชื่อ แพคเกจอื่น ๆ

ตัวอย่างเช่นฉันสนใจที่จะสร้างแผนที่คล้ายกับแผนที่นี้ (แต่สำหรับสหรัฐอเมริกา):

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

สำหรับแผนที่อเมริกาของฉันจะมีแผนภูมิแท่ง 50 แผนภูมิแต่ละแผนภูมิ

ฉันได้รับแผนที่นี้จาก/programming/20465070/barplots-on-a-mapแต่ดูเหมือนว่า ggsubplot ไม่ทำงานในเวอร์ชัน R ของฉัน (คล้ายกับที่คนอื่นพูดในโพสต์ )


2
ฉันรู้วิธีการใช้ggsubplotแพ็คเกจ แต่ตอนนี้เลิกใช้แล้วและใช้งานไม่ได้ (ดังที่คุณกล่าวไว้) บางทีโพสต์นี้อาจเป็นจุดเริ่มต้น: stackoverflow.com/questions/36063043/ …
อังเดรซิลวา

ศึกษาเอกสารเกี่ยวกับพล็อตทริกซ์เพื่อดูว่ามีฟังก์ชั่นดังกล่าวอยู่หรือไม่ จากนั้นปรึกษาผู้สร้างพล็อตทริกซ์
Mox

คำตอบ:


1

ฉันรู้ว่าฉันมาสายเกินไป แต่ฉันคิดว่าฉันพบวิธีแก้ปัญหาที่ค่อนข้างง่าย

หากคุณมีรูปลักษณ์ของซอร์สโค้ดของfloating.pie()(เช่นโดยการโทรgetAnywhere(floating.pie)) คุณจะสังเกตเห็นว่ามันใช้วิธีการที่เรียบง่ายและมีประสิทธิภาพ: การวาดเซ็กเมนต์วงกลมเป็นรูปหลายเหลี่ยม หากสิ่งที่คุณต้องการจากแผนภูมิแท่งของคุณคือแถบ (ไม่มีป้ายชื่อแกน ฯลฯ ) คุณสามารถทำตามวิธีการเดียวกันและเขียนฟังก์ชั่นของคุณเอง นี่คือรุ่นที่รวดเร็วและสกปรก:

# the function 
mapbars <- function (x, xllc = 0, yllc = 0, barwidth=1, maxheight=10){
  # calculate how long each bar needs to be
  bars <- (x/max(x)) * maxheight
  # get some quick colors
  col <- rainbow(length(x))

  for(i in 1:length(x)){
    # figure out x- and y coordinates for the corners
    leftx   <- xllc + ((i-1) * barwidth)
    rightx  <- leftx + barwidth
    bottomy <- yllc
    topy    <- yllc + bars[i]
    # draw the bar
    polygon(x=c(leftx, rightx, rightx, leftx, leftx),
            y=c(bottomy, bottomy, topy, topy, bottomy),
            col=col[i])
  }
}
  • x สำหรับค่าที่จะถูกแสดงโดยบาร์
  • xllcและyllcระบุตำแหน่งของมุมซ้ายล่างของแถบด้านซ้ายในระบบพิกัดที่คุณใช้
  • barwidthและmaxheightใช้สำหรับปรับขนาดของแท่ง

นี่คือตัวอย่างที่มีspพล็อตพื้นฐาน ฉันไม่คิดว่าฉันได้ทำงานกับ plotrixก่อน แต่ขึ้นอยู่กับวิธีการทำงานของผมคิดว่าเรื่องนี้ควรจะยังทำงานร่วมกับfloating.pieplotrix

library(sp)
library(maptools) # just for easy access to a background map
# load some country borders as a background
data("wrld_simpl")
plot(wrld_simpl)

# zoom on a bit …
mexico <- subset(wrld_simpl, NAME=="Mexico")
plot(mexico, axes=TRUE)

# data for the bars
x1 <- c(4, 7, 1, 2)

# plot
plot(mexico, axes=TRUE)
mapbars(x=x1, xllc=-110, yllc=20, barwidth=.5, maxheight=5)
legend(x="topright", pch=22, col="black", pt.bg=rainbow(x1), legend=c("foo", "bar", "baz", "foobar"))

# add another one:
x2 <- c(9, 21, 64, 45, 33, 43, 12, 7)
mapbars(x=x2, xllc=-100, yllc=25, barwidth=.2, maxheight=2)

ผลลัพธ์จะเป็นดังนี้: แผนที่ตัวอย่างที่เกิดจากโค้ดด้านบน


ฉันได้รับข้อผิดพลาดนี้เมื่อฉันเรียกใช้ mapbars line> mapbars (x = x1, xllc = -110, yllc = 40, barwidth = .5, maxheight = 5) ข้อผิดพลาดใน mapbars (x = x1, xllc = -110, yllc = 40, barwidth = 0.5, maxheight = 5): ไม่พบฟังก์ชัน "mapbars"
324

ฟังดูเหมือนว่าคุณไม่ได้ใช้รหัสในส่วนแรกของคำตอบของฉัน ฟังก์ชั่นที่กำหนดไว้ในบล็อกใหญ่ครั้งแรกของรหัสที่เป็นพูดว่าmapbars mapbars <- function (x, xllc = 0, ...คุณจะต้องดำเนินการทั้งส่วนของรหัสก่อนเพื่อ "สอน" R คำสั่งใหม่
ผ้าเช็ดตัวของฉันอยู่ที่ไหน

-1

ggplot2และggvisเป็นห้องสมุดสองแห่งที่อาจช่วยให้คุณแสดงพล็อตบนแผนที่ ใน ggplot2 คุณสามารถพล็อตฟองอากาศบนแผนที่จากนั้นคุณต้องให้ aes () พิกัดที่ไม่มีส่วนเกี่ยวข้องกับขนาดและสีของฟอง เกี่ยวกับแผนภูมิแท่งคุณต้องกำหนดอย่างน้อย 2 คู่ของ x และ y หนึ่งรายการสำหรับที่ตั้งแผนภูมิแท่งและอีกรายการหนึ่งสำหรับความสูงและความกว้างของแผนภูมิแท่ง กล่าวอีกนัยหนึ่งคุณจำเป็นต้องรู้พิกัดของ 4 มุมสำหรับบาร์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.