ใครมีประสบการณ์กับซอฟต์แวร์ (โดยเฉพาะอย่างยิ่งฟรีโอเพนซอร์ซ) ที่จะถ่ายภาพของข้อมูลที่ถูกพล็อตบนพิกัดคาร์ทีเซียน (มาตรฐานพล็อตประจำวัน) และแยกพิกัดของจุดที่พล็อตลงบนกราฟ
โดยพื้นฐานแล้วนี่เป็นปัญหาการขุดข้อมูลและปัญหาการแสดงข้อมูลย้อนกลับ
ใครมีประสบการณ์กับซอฟต์แวร์ (โดยเฉพาะอย่างยิ่งฟรีโอเพนซอร์ซ) ที่จะถ่ายภาพของข้อมูลที่ถูกพล็อตบนพิกัดคาร์ทีเซียน (มาตรฐานพล็อตประจำวัน) และแยกพิกัดของจุดที่พล็อตลงบนกราฟ
โดยพื้นฐานแล้วนี่เป็นปัญหาการขุดข้อมูลและปัญหาการแสดงข้อมูลย้อนกลับ
คำตอบ:
ตรวจสอบดิจิทัลแพคเกจสำหรับR มันออกแบบมาเพื่อแก้ปัญหาประเภทนี้อย่างแน่นอน
มีตัวเลือกต่าง ๆ มากมาย แต่โดยพื้นฐานแล้วทั้งหมดใช้เวิร์กโฟลว์เดียวกัน:
โปรแกรมจะคืนค่าแต่ละจุดเป็น xy matrix
บ่อยครั้งที่มันช่วยในการเลือกจุดหากภาพถูกซูมโดยการอัปโหลดรูปภาพที่ซูมหรือใช้คุณสมบัติการซูมที่มีในบางโปรแกรม
มีหลายโปรแกรมและพวกเขาแตกต่างกันไปในคุณสมบัติพิเศษการใช้งานการออกใบอนุญาตและค่าใช้จ่าย ฉันได้แสดงรายการไว้ด้านล่าง
ทุกอย่างที่ฉันเคยทำงานได้ดี ยกเว้นในบริบทที่ข้อผิดพลาดการวัดมีขนาดเล็กมากข้อผิดพลาดจากการขูดกราฟนั้นไม่มีนัยสำคัญ (เช่นข้อผิดพลาดจากการแปลงเป็นดิจิทัลขนาดของแถบข้อผิดพลาดหรือความไม่แน่นอนในการประมาณค่า) หากยังไม่ได้ทดสอบความถูกต้องของโปรแกรมใด ๆ เหล่านี้ แต่มันน่าสนใจที่จะเปรียบเทียบระหว่างผู้ใช้ระหว่างโปรแกรมและกับผลลัพธ์ของการวิเคราะห์ทางสถิติที่ทำซ้ำ
TL; DR: WebPlotDigitizerพร้อมใช้งานในรูปแบบเว็บแอปพลิเคชันรวมถึงปลั๊กอิน Chrome
ผู้ตอบคนอื่นคิดว่าคุณจัดการกับภาพแรสเตอร์ของกราฟ แต่ทุกวันนี้แนวปฏิบัติที่ดีคือการเผยแพร่กราฟในรูปแบบเวกเตอร์ ในกรณีนี้คุณสามารถบรรลุความถูกต้องที่สูงขึ้นของข้อมูลที่กู้คืนได้และประเมินข้อผิดพลาดการกู้คืนหากคุณทำงานกับรหัสของกราฟเวกเตอร์โดยตรงโดยไม่ต้องแปลงเป็นภาพแรสเตอร์
เนื่องจากเอกสารเผยแพร่ออนไลน์เป็นไฟล์ PDF ฉันถือว่าคุณมีไฟล์ PDF ซึ่งมีพล็อตเวกเตอร์ที่มีข้อมูลที่คุณต้องการกู้คืนจากมัน (รับในรูปแบบตัวเลข) และประมาณการข้อผิดพลาดในการกู้คืนที่แนะนำ
ประการแรก PDF เป็นรูปแบบเวกเตอร์ซึ่งเป็นข้อความเดิม (สามารถอ่านได้โดยโปรแกรมแก้ไขข้อความ) ปัญหาคือมันสามารถ (และเกือบตลอดเวลา) มีสตรีมข้อมูลที่ถูกบีบอัดซึ่งต้องการให้ไม่มีการบีบอัดเพื่อที่จะอ่านโดยโปรแกรมแก้ไขข้อความ สตรีมข้อมูลที่ถูกบีบอัดเหล่านี้มักจะมีข้อมูลที่เราต้องการ
มีหลายวิธีในการคลายการบีบอัดข้อมูลสตรีมเพื่อแปลงไฟล์ PDF เป็นเอกสารต้นฉบับด้วยรหัส PDF ที่อ่านได้ อาจเป็นวิธีที่ง่ายที่สุดคือใช้ยูทิลิตี้ QPDFฟรีพร้อม--stream-data=uncompress
ตัวเลือก :
qpdf infile.pdf --stream-data=uncompress -- outfile.pdf
บางวิธีการอื่น ๆ ที่อธิบายไว้ที่นี่และที่นี่
outfile.pdf ที่สร้างขึ้นสามารถเปิดได้โดยตัวแก้ไขข้อความ ตอนนี้คุณต้องมีคู่มืออ้างอิง PDF 1.7เพื่อทำความเข้าใจกับสิ่งที่คุณเห็น อย่าตกใจในขณะนี้! คุณจำเป็นต้องรู้ผู้ประกอบการเพียงไม่กี่คนที่อธิบายไว้ใน "ตารางที่ 4.9 ผู้ประกอบการก่อสร้างเส้นทาง" ในหน้า 226 - 227 ตัวดำเนินการที่สำคัญที่สุดคือ (คอลัมน์แรกมีข้อกำหนดพิกัดสำหรับผู้ประกอบการที่สองประกอบด้วยผู้ประกอบการและที่สามคือชื่อผู้ประกอบการ ):
x y m moveto
x y l lineto
x y width height re rectangle
h closepath
ในกรณีส่วนใหญ่ก็เพียงพอที่จะรู้ว่าตัวดำเนินการทั้งสี่สำหรับการกู้คืนข้อมูล
ตอนนี้คุณต้องนำเข้าไฟล์ outfile.pdf เป็นข้อความลงในบางโปรแกรมที่คุณสามารถจัดการข้อมูลได้ ฉันจะแสดงวิธีการที่จะทำมันด้วยMathematica
การนำเข้าไฟล์:
pdfCode = Import["outfile.pdf", "Text"];
ตอนนี้ฉันคิดว่ากรณีที่ง่ายที่สุด: กราฟมีเส้นที่ประกอบด้วยส่วนสองจุดจำนวนมาก ในกรณีนี้แต่ละส่วนของบรรทัดจะถูกเข้ารหัสเช่นนี้
268.79999 408.92975 m
272.39999 408.92975 l
แยกส่วนดังกล่าวทั้งหมดจากรหัส PDF:
lines = StringCases[pdfCode,
StartOfLine ~~ x1 : NumberString ~~ " " ~~ y1 : NumberString ~~ " m\n" ~~
x2 : NumberString ~~ " " ~~ y2 : NumberString ~~ " l\n"
:> ToExpression@{{x1, y1}, {x2, y2}}];
การแสดงภาพพวกเขา:
Graphics[{Line[lines]}]
คุณได้รับสิ่งนี้ (กระดาษที่ฉันใช้ประกอบด้วยสี่กราฟ):
แต่ละเซกเมนต์ที่อยู่ติดกันจะแบ่งกันหนึ่งจุด ดังนั้นในกรณีนี้คุณสามารถเปลี่ยนลำดับของกลุ่มที่อยู่ติดกันเป็นเส้นทาง:
paths = Split[lines, #1[[2]] == #2[[1]] &];
ตอนนี้คุณสามารถเห็นภาพเส้นทางทั้งหมดแยกจากกัน:
Graphics[{Line /@ paths}]
จากตัวเลขนี้คุณสามารถเลือก (โดยการดับเบิลคลิก) Graphics
เส้นทางที่คุณกำลังมองหาตัวเลือกคัดลอกและวางกราฟิกใหม่ {1, 1, 1}
สำหรับการแปลงมันย้อนกลับไปยังรายการของจุดที่คุณใช้องค์ประกอบ ตอนนี้เรามีจุดไม่ได้อยู่ในระบบพิกัดของกราฟ แต่ในระบบพิกัดของไฟล์ PDF เราจำเป็นต้องสร้างความสัมพันธ์ระหว่างพวกเขา
จากพล็อตดังกล่าวข้างต้นคุณเลือกเห็บด้วยมือ (ถือหุ้นShift
สำหรับการเลือกหลาย) Graphics
แล้วคัดลอกและวางใหม่ นี่คือวิธีที่คุณสามารถแยกพิกัดของเห็บแนวนอน:
ตอนนี้ตรวจสอบความแตกต่างระหว่างเห็บ:
Differences[reHorTicks]
จากความแตกต่างเหล่านี้คุณสามารถดูได้ว่าตำแหน่งของเห็บในไฟล์ PDF นั้นแม่นยำเพียงใด มันให้การประมาณข้อผิดพลาดที่แนะนำโดยการแปลงดาต้าพอยน์ดั้งเดิมเป็นกราฟเวกเตอร์ที่รวมอยู่ในไฟล์ PDF หากมีข้อผิดพลาดในการจัดตำแหน่งเห็บคุณสามารถลดข้อผิดพลาดโดยการปรับพิกัดของเห็บเป็นแบบเชิงเส้น ฟังก์ชันเชิงเส้นนี้สามารถใช้เพื่อรับพิกัดดั้งเดิมของจุดของเส้นทาง (ซึ่งอยู่ในระบบพิกัดของพล็อต)
ฉันไม่ได้ใช้มัน แต่ห้องปฏิบัติการ UWA CogSciแนะนำDataThief (แชร์แวร์)
ตรวจสอบ engauge http://digitizer.sourceforge.net/ฟรีและโอเพ่นซอร์ส
ลอง scanit: http://amsterchem.com/scanit.html
ไม่มีค่าใช้จ่ายรันบน Windows
นอกจากนี้คุณยังสามารถลอง im2graph ( http://www.im2graph.co.il ) เพื่อแปลงกราฟเป็นข้อมูล ทำงานได้ใน Linux และ Windows
'g3data' เป็นซอฟต์แวร์ที่สามารถใช้เพื่อวัตถุประสงค์ของคุณ มันเป็นซอฟต์แวร์ฟรีและฉันใช้มัน คุณสามารถดาวน์โหลดได้จากที่นี่: http://www.frantz.fi/software/g3data.php
ฉันต้องทำเช่นนี้หลายครั้งในอาชีพของฉันในที่สุดฉันก็รวบรวมโปรแกรมจาวาสคริปต์ที่มีอยู่ที่นี่:
http://kdusling.github.io/projects/DataGrab/index.html
ขออภัย แต่คุณจะต้องคลิกทุกจุด แม้ว่าคุณจะสามารถใช้ปุ่มลูกศรซึ่งจะช่วยลดความเครียดที่ข้อมือ
STIPlotDigitizer ได้รับการเผยแพร่ใหม่
http://stiwww.com/product/software-techniques-plot-digitizer
สำหรับR
ผู้ใช้แพ็คเกจgrImport
(ในCRAN ) สามารถนำเข้ากราฟิกแบบเวกเตอร์และแปลงเป็นวัตถุที่ R สามารถตีความได้ สันนิษฐานว่าสามารถแปลง PDF (หรือรูปแบบเวกเตอร์อื่น ๆ ที่น่าสนใจ) ให้เป็นรูปแบบ PostScript ซึ่งสามารถทำได้เช่นกับInkscape : นำเข้า ( File > Import
) หน้า PDF ของคุณด้วยรูปของคุณลงใน Inkspace File > Save As > Save as type: > PostScript *.ps
และ เมื่อคุณมี*.ps
ไฟล์ของคุณร่วงลงgrImport
บทความสั้นนำเข้ากราฟิกแบบเวกเตอร์ส่วนที่เกี่ยวข้องมากขึ้นคือ '4.1 การคัดลอกข้อมูลจากภาพ '
คุณจะต้อง Ghostscript บนระบบปฏิบัติการของคุณ - พยายามที่จะดาวน์โหลดได้จากที่นี่
หมายเหตุหากคุณเรียกใช้ข้อผิดพลาด ghostscript 'สถานะ 127' เมื่อใดก็ตามให้เรียกgrImport::PostScriptTrace
คำแนะนำจากที่นี่ซึ่งบอกให้ตั้งค่าพา ธ เป็น ghostscript บนเครื่องของคุณด้วยตนเอง
นี่คือตัวอย่างรหัส R เพื่อนำเข้าไฟล์ PostScript ไปยัง R:
install.packages("grImport")
require(grImport)
# if you get the ghostscript error 'status 127' then set the path to ghostscript, e.g.:
Sys.setenv(R_GSCMD = normalizePath("C:/Program Files/gs/gs9.22/bin/gswin64c.exe"))
PostScriptTrace(file = "graph.ps", outfilename = "graph.ps.xml")
my_fig <- readPicture(rgmlFile = "graph.ps.xml")
grid.picture(my_fig)
หมายเหตุถ้ากราฟของคุณอยู่ในหน้าในไฟล์ PDF PDFTK builder
หลายหน้าแล้วคุณสามารถแยกเอกสารหลายหน้าด้วย นำเข้าไฟล์ PDF หน้าเดียวของคุณใน Ikscape และลบองค์ประกอบพิเศษใด ๆ (ข้อความพิเศษองค์ประกอบกราฟพิเศษ) สิ่งนี้จะช่วยให้งานของคุณเป็น R ง่ายขึ้นเมื่อพยายามจับพิกัดขององค์ประกอบกราฟที่คุณสนใจ