การจำกัดแกนสำหรับ ggplot

ฉันกำลังพยายามวางแผนการแต่งงานของชุดข้อมูล ซึ่งประกอบด้วยรัฐ ปี และอัตรา อย่างไรก็ตาม ฉันกำลังพยายามเน้นไปที่ช่วงปีที่เฉพาะเจาะจง เพื่อให้กราฟดูแออัดน้อยลง

marriage<-read.csv(file="~/Desktop/datah.csv", header=T, sep=",",check.names=FALSE)
marriage
marriage <- marriage %>%
     gather(key=year, value=rate, `2017`:`1990`)
ggplot(marriage, aes(x=year, y=rate, group=State)) +
     geom_point(aes(color=State)) +
     geom_line(aes(color=State)) +
     theme_bw()

ฉันได้ลองเพิ่มสิ่งต่อไปนี้เพื่อพยายามจำกัดแกน x และ y ไว้ที่บรรทัดสุดท้ายของโค้ดด้านบน

+ylim(0,2)
+scale_x_continuous(limits=c(2000, 2005))
+xlim(2010, 2015)
+scale_x_continous(breaks = seq(2000, 2005, 5))

แต่ฉันเข้าใจสิ่งนี้ ข้อผิดพลาด: ค่าที่ไม่ต่อเนื่องที่จ่ายให้กับมาตราส่วนต่อเนื่อง

ฉันได้ลองแปลงมันเป็นตัวเลขด้วย

marriage$variable=as.numeric(levels(marriage$variable))[marriage$variable]

ฉันได้รับข้อผิดพลาดต่อไปนี้ Error in $‹-.data.frame(tmp,ตัวแปร, value = numeric(0)) : replacement has 0 rows, data has 1071

นี่คือสองสามบรรทัดแรกของข้อมูล

                  State 2017 2016 2015 2014 2013 2012 2011 2010 2009 2008 2007 2006 2005 2004 2003 2002 2001 2000 1999 1995 1990
1               Alabama  7.0  7.1  7.4  7.8  7.8  8.2  8.4  8.2  8.3  8.6  8.9  9.2  9.2  9.4  9.6  9.9  9.4 10.1 10.8  9.8 10.6
2                Alaska  6.9  7.1  7.4  7.5  7.3  7.2  7.8  8.0  7.8  8.4  8.5  8.2  8.2  8.5  8.1  8.3  8.1  8.9  8.6  9.0 10.2
3               Arizona  5.8  5.9  5.9  5.8  5.4  5.6  5.7  5.9  5.6  6.0  6.4  6.5  6.6  6.7  6.5  6.7  7.6  7.5  8.2  8.8 10.0
4              Arkansas  9.5  9.9 10.0 10.1  9.8 10.9 10.4 10.8 10.7 10.6 12.0 12.4 12.9 13.4 13.4 14.3 14.3 15.4 14.8 14.4 15.3
5           California   6.3  6.5  6.2  6.4  6.5  6.0  5.8  5.8  5.8  6.7  6.2  6.3  6.4  6.4  6.1  6.2  6.5  5.8  6.4  6.3  7.9
6              Colorado  7.3  7.4  6.8  7.1  6.5  6.8  7.0  6.9  6.9  7.4  7.1  7.2  7.6  7.4  7.8    8  8.2  8.3  8.2  9.0  9.8
7           Connecticut  5.6  5.6  5.3  5.4    5  5.2  5.5  5.6  5.9  5.4  5.5  5.5  5.8  5.8  5.5  5.7  5.4  5.7  5.8  6.6  7.9
8              Delaware  5.5  5.6  5.7    6  6.6  5.8  5.2  5.2  5.4  5.5  5.7  5.9  5.9  6.1    6  6.4  6.5  6.5  6.7  7.3  8.4
9  District of Columbia  8.2  8.1  8.2 11.8 10.8  8.4  8.7  7.6  4.7  4.1  4.2    4  4.1  5.2  5.1  5.1  6.2  4.9  6.6  6.1  8.2
10              Florida  7.8  8.1  8.2  7.3    7  7.2  7.4  7.3  7.5  8.0  8.5  8.6  8.9  9.0    9  9.4  9.3  8.9  8.7  9.9 10.9
11              Georgia  6.9  6.8  6.2  ---  ---  6.5  6.6  7.3  6.6  6.0  6.8  7.3  7.0  7.9    7  6.5  6.1  6.8  7.8  8.4 10.3
12               Hawaii 15.3 15.6 15.9 17.7 16.3 17.5 17.6 17.6 17.2 19.1 20.8 21.9 22.6 22.6   22 20.8 19.6 20.6 18.9 15.7 16.4
13                Idaho  7.8  8.1  8.2  8.4  8.2  8.2  8.6  8.8  8.9  9.5 10.0 10.1 10.5 10.8 10.9   11 11.2 10.8 12.1 13.1 13.9

person subrinarafiq    schedule 12.11.2019    source แหล่งที่มา
comment
ดูเหมือนว่าคอลัมน์ year ของคุณมีแนวโน้มที่จะอยู่ในหมวดหมู่หลังจากคุณ gather() อาร์กิวเมนต์ convert ใน gather() อาจช่วยได้   -  person aosmith    schedule 13.11.2019
comment
@MatthewR ฉันดูลิงก์นั้นและพยายามใช้งานและได้รับข้อผิดพลาดนี้ marriage$variable=as.numeric(levels(marriage$variable))[marriage$variable] เกิดข้อผิดพลาดใน $‹-.data.frame(tmp, ตัวแปร, ค่า = ตัวเลข(0)) : การแทนที่มี 0 แถว, ข้อมูลมี 1,071 –   -  person subrinarafiq    schedule 13.11.2019
comment
สำหรับผู้ที่จะช่วยคุณตีความข้อความแสดงข้อผิดพลาดเกินกว่าจะคาดเดา ตัวอย่างที่ทำซ้ำได้ เป็นสิ่งจำเป็น   -  person camille    schedule 13.11.2019
comment
ฉันเชื่อว่าคำถามนี้เกี่ยวกับการอ่านในไฟล์จริงๆ ไม่ใช่ ggplot2 ฉันคิดว่าอาการคือพล็อต แต่ปัญหาคืออินพุตไฟล์ ลอง na.strings = "---" ภายใน read.csv()   -  person Adam    schedule 13.11.2019


คำตอบ (3)


พยายาม

scale_x_continous(breaks = seq(2000, 2015, 5)

ขออภัยไม่สามารถแสดงความคิดเห็นได้ ตัวแทนไม่เพียงพอ

person Hansel Palencia    schedule 12.11.2019
comment
ฉันรู้ว่าคุณไม่สามารถแสดงความคิดเห็นได้ แต่ยังคงมีข้อผิดพลาดเดิมแสดงออกมา ข้อผิดพลาด: ค่าที่ไม่ต่อเนื่องที่จ่ายให้กับมาตราส่วนต่อเนื่อง - person subrinarafiq; 13.11.2019

ตัวแปร 'ปี' จะถูกจัดเก็บเป็นอักขระหลัง gather คุณสามารถปรับเปลี่ยนรูปร่างใหม่ได้ (อัปเดตเป็น pivot_longer):

    marriage <-
      marriage %>%
      pivot_longer(
        cols = `2017`:`1990`,
        names_to = 'year',
        values_to = 'rate'
      ) %>%
      mutate(
        year = as.numeric(year)
      )

การโทร ggplot ควรทำงานจากที่นั่น

person AHart    schedule 13.11.2019
comment
ฉันได้รับข้อผิดพลาดนี้เมื่อฉันพยายามเรียกใช้ Error ในการแต่งงาน %›% pivot_longer(cols = 2017:1990,names_to = year, : failed find function %›% - person subrinarafiq; 13.11.2019
comment
ตัวดำเนินการไปป์ %>% มาจาก magrittr ซึ่งเป็นส่วนหนึ่งของ tidyverse - person AHart; 13.11.2019
comment
ฉันติดตั้งแพ็คเกจที่ถูกต้องแล้ว แต่ได้รับข้อผิดพลาดต่อไปนี้: ไม่มีประเภททั่วไปสำหรับ 2017 ‹double› และ 2014 ‹factor‹31e4f›› โทร rlang::last_error() เพื่อดูย้อนหลัง - person subrinarafiq; 14.11.2019

ฉันคิดว่า ggplot() จะทำงานได้ดีโดยอัตโนมัติโดยใช้ช่วงเวลาที่เหมาะสม หากคุณต้องการปล่อยให้มันทำหน้าที่ของมันเอง ให้ลองแปลงปีเป็นวันที่ วิธีง่ายๆ ในการทำเช่นนี้คือใช้ make_date() จาก lubridate

ห้องสมุด

library(dplyr)
library(tidyr)
library(lubridate)
library(ggplot2)

อ่านในข้อมูล (แก้ไขตามการอัปเดตคำถาม)

นี่คือข้อมูลตามการแก้ไข นี่ควรนำมันเข้ามาเหมือนที่คุณมี โปรดทราบว่าฉันเห็นได้ชัดว่าใช้แนวทางที่แตกต่างจากที่คุณทำ

ฉันคิดว่าคุณจะต้องเพิ่ม na.strings = "---" เหมือนที่ฉันทำเพื่อให้ฟิลด์ NA อ่านได้อย่างถูกต้อง

นอกจากนี้ ฉันยังต้องเพิ่ม District of Columbia ไว้ในเครื่องหมายคำพูดเดี่ยวอีกด้วย นี่อาจเป็นปัญหาที่คุณประสบ

data <- "State 2017 2016 2015 2014 2013 2012 2011 2010 2009 2008 2007 2006 2005 2004 2003 2002 2001 2000 1999 1995 1990
Alabama  7.0  7.1  7.4  7.8  7.8  8.2  8.4  8.2  8.3  8.6  8.9  9.2  9.2  9.4  9.6  9.9  9.4 10.1 10.8  9.8 10.6
Alaska  6.9  7.1  7.4  7.5  7.3  7.2  7.8  8.0  7.8  8.4  8.5  8.2  8.2  8.5  8.1  8.3  8.1  8.9  8.6  9.0 10.2
Arizona  5.8  5.9  5.9  5.8  5.4  5.6  5.7  5.9  5.6  6.0  6.4  6.5  6.6  6.7  6.5  6.7  7.6  7.5  8.2  8.8 10.0
Arkansas  9.5  9.9 10.0 10.1  9.8 10.9 10.4 10.8 10.7 10.6 12.0 12.4 12.9 13.4 13.4 14.3 14.3 15.4 14.8 14.4 15.3
California   6.3  6.5  6.2  6.4  6.5  6.0  5.8  5.8  5.8  6.7  6.2  6.3  6.4  6.4  6.1  6.2  6.5  5.8  6.4  6.3  7.9
Colorado  7.3  7.4  6.8  7.1  6.5  6.8  7.0  6.9  6.9  7.4  7.1  7.2  7.6  7.4  7.8    8  8.2  8.3  8.2  9.0  9.8
Connecticut  5.6  5.6  5.3  5.4    5  5.2  5.5  5.6  5.9  5.4  5.5  5.5  5.8  5.8  5.5  5.7  5.4  5.7  5.8  6.6  7.9
Delaware  5.5  5.6  5.7    6  6.6  5.8  5.2  5.2  5.4  5.5  5.7  5.9  5.9  6.1    6  6.4  6.5  6.5  6.7  7.3  8.4
'District of Columbia'  8.2  8.1  8.2 11.8 10.8  8.4  8.7  7.6  4.7  4.1  4.2    4  4.1  5.2  5.1  5.1  6.2  4.9  6.6  6.1  8.2
Florida  7.8  8.1  8.2  7.3    7  7.2  7.4  7.3  7.5  8.0  8.5  8.6  8.9  9.0    9  9.4  9.3  8.9  8.7  9.9 10.9
Georgia  6.9  6.8  6.2  ---  ---  6.5  6.6  7.3  6.6  6.0  6.8  7.3  7.0  7.9    7  6.5  6.1  6.8  7.8  8.4 10.3
Hawaii 15.3 15.6 15.9 17.7 16.3 17.5 17.6 17.6 17.2 19.1 20.8 21.9 22.6 22.6   22 20.8 19.6 20.6 18.9 15.7 16.4
Idaho  7.8  8.1  8.2  8.4  8.2  8.2  8.6  8.8  8.9  9.5 10.0 10.1 10.5 10.8 10.9   11 11.2 10.8 12.1 13.1 13.9"

marriage <- read.table(textConnection(data), header = TRUE, na.strings = "---") %>%
  as_tibble() %>%
  rename_all(~ sub("X", "", .))

ณ จุดนี้ marriage ควรเป็นข้อมูลของคุณ ฉันจะทำการปรับเปลี่ยนเล็กน้อยเพื่อแปลงเป็นวันที่

marriage <- marriage %>%
  gather(key=year, value=rate, `2017`:`1990`)%>%
  mutate(year = make_date(year))

โครงเรื่อง

ไม่มีการเปลี่ยนแปลงโค้ดการลงจุดของคุณ แกนได้รับการจัดการอย่างเป็นธรรมชาติ

ggplot(marriage, aes(x=year, y=rate, group=State)) +
  geom_point(aes(color=State)) +
  geom_line(aes(color=State)) +
  theme_bw()

เอาท์พุตกราฟ

person Adam    schedule 13.11.2019
comment
รับข้อผิดพลาดต่อไปนี้จากสิ่งนี้ ข้อผิดพลาดใน is_string(x) : ไม่พบวัตถุ '2017' - person subrinarafiq; 13.11.2019
comment
ฉันได้อัปเดตคำถามเดิมเพื่อให้สะท้อนถึงสองสามบรรทัดแรกของชุดข้อมูล ฉันมีคอลัมน์ต่ำกว่าปี แต่มันจะทำให้ R อ่านไฟล์ไม่ถูกต้อง ซึ่งเป็นสาเหตุที่ฉันต้องกำจัดมันออกจากไฟล์ csv ของฉันทั้งหมดพร้อมกัน . ฉันมีแถวปีและคอลัมน์ของรัฐ - person subrinarafiq; 13.11.2019
comment
ชุดข้อมูลเห็นได้ชัดว่ามีทั้งหมด 51 สถานะ ดังนั้นฉันจึงได้เพิ่มสถานะอีกสองสามสถานะเพื่อให้คุณสามารถติดตามปัญหาต่อไปนี้ได้ เมื่อฉันเรียกใช้คำสั่งของคุณหลังจากที่คุณกำหนดข้อมูล ฉันยังคงได้รับข้อผิดพลาด Error in scan(file = file, what = what, sep = sep, quote = quote, dec = dec, : line 9 ไม่มี 22 องค์ประกอบ บรรทัดที่ 9 มี 22 ค่า จอร์เจียเป็นรัฐเดียวที่ค่าหายไปและแม้ว่าฉันจะใส่ค่าโดยพลการฉันก็ยังได้รับข้อผิดพลาด มีความคิดเห็นเกี่ยวกับสาเหตุที่ทำให้เกิดสิ่งนี้หรือไม่ - person subrinarafiq; 13.11.2019
comment
เมื่อฉันใส่สถานะมากขึ้น แกน y ก็เริ่มดูล้นหลาม ฉันได้ทำไปแล้วใน 30 รัฐ และแกน y กำลังแสดงรายการทุกค่า ที่อัตราการแต่งงานของรัฐคือสำหรับ 21 ปี ดังนั้นฉันคิดว่าฉันยังต้องหาทางจำกัดแกนของตัวเองหรืออย่างน้อยก็เปลี่ยนสเกล - person subrinarafiq; 14.11.2019
comment
นั่นเป็นเพราะประเภทข้อมูล มันยังคงคิดว่าสิ่งเหล่านี้เป็นหมวดหมู่ คุณต้องแปลง x เป็นวันที่และตรวจสอบให้แน่ใจว่า y เป็นตัวเลข - person Adam; 14.11.2019