ซูมกราฟใน Mathematica

กราฟที่ได้จากคำสั่ง Plot ใน Mathematica นี่จะ click ซูมเข้าไปดูในบริเวณที่สนใจไม่ได้ ต้องคอยมากำหนด Range ที่จะ plot เอาเองเพื่อดูบริเวณที่สนใจ แต่ล่าสุดก็มีคนเขียนเป็น Function สำหรับทำให้เราสามารถที่จะเลือกซูมดูบริเวณที่สนใจในกราฟได้ครับ

ลองไปดูได้ที่ https://resources.wolframcloud.com/FunctionRepository/resources/DragZoomPlot

ผมลองโหลดมาเล่นแล้วนี่สะดวกมากๆครับ

ตัวอย่างใช้งาน notebook ของ Mathematica


ผมเขียน code เพื่อสร้างกราฟเพื่อดูว่าผลลัพธ์จากโมเดลที่ผมสร้างขึ้นมานั้นมันเหมือนหรือต่างข้อมูลจริงจากคนไข้อย่างไร โดยเขียนให้มันสร้าง notebook ขึ้นมาพร้อมกับรัน code สำหรับสร้างกราฟเลย โดยที่ในแต่ล่ะ notebook จะมีข้อมูลของคนไข้ประมาณ 300 คน ตามตัวอย่างนี้ครับ

ทีนี่ผมอยากจะ save กราฟที่สร้างขึ้นในแต่ล่ะ cell เป็น pdf จากไฟล์ notebook แต่ล่ะไฟล์ ซึ่งในแต่ล่ะ notebook จะมีประมาณ 5-10 cells ได้ ถ้าไปมัวเลือก save ในแต่ล่ะ cells คงต้องเสียเวลามาก เพราะมันมีหลายไฟล์ และผมก็มีหลายโมเดล

วิธีที่ผมทำก็คือเขียน code มาเปิด notebook แต่ล่ะไฟล์แล้วก็ให้มันเลือกเซฟเฉพาะ กราฟของแต่ล่ะ cell ที่ต้องการโดย code ที่เขียนก็จะประมาณนี้ครับ

ExportPdf[nbfilename_, outnames_List] := Module[{nb, nbr, i},
   nb = NotebookOpen[NotebookDirectory[] <> nbfilename];
   SelectionMove[nb, Before, Notebook];
   For[i = 1, i <= Length@outnames, i++,
    SelectionMove[nb, Next, CellContents, 2];
    nbr = NotebookRead[nb];
    If[nbr =!= {},
     Export[outnames[[i]] <> ".pdf", nbr];
     Print[outnames[[i]] <> ".pdf has been created."];
     ];
    ];
   NotebookClose[nb];
   ];

โดยคำสั่งหลักที่ใช้ก็คือ NotebookOpen, SelectionMove และ NotebookRead ครับ

NotebookOpen ก็เปิดไฟล์ notebook แล้วสร้างเป็น object จากนั้นก็เคลื่อนที่ภายใน Notebook ผ่านคำสั่ง SelectionMove พร้อมกับอ่านค่าตรงตำแหน่งที่เคลื่อนที่ไปด้วยคำสั่ง NotebookRead แล้วก็เขียนค่าที่ได้ออกมาเป็นไฟล์ใน format ที่ต้องการ

ลองดูเพิ่มเติมการใช้งาน notebook ของ Mathematica ได้ที่ https://reference.wolfram.com/language/tutorial/ManipulatingNotebooksOverview.html

คำแนะนำการใช้งาน Mathematica notebook

Notebooks จาก Mathematica นี่ปฏิวัติเรื่อง workflow ของงานด้านการคำนวณเลยที่เดียวครับ ไอเดียที่แสดงผลลัพธ์ต่อท้ายคำสั่ง สามารถที่เซฟและส่งต่อผลลัพธ์ในลักษณะเหมือนสมุดรายงานมีทั้งภาพ เสียง การเคลื่อนไหว แถมมีความสามารถเหมือน ms word กับ ms power point รวมกัน บวกกับสามารถที่จะ export เป็นได้หลายformat มาก และความสามารถอื่นๆอีกมากมาย ไม่แปลกใจที่ไอเดียจะถูกลอกไปในภาษาอื่นๆ โดยเฉพาะ R กับ Python แต่ความสามารถของ notebooks จากทั้งสองภาษายังห่างไกลจากของ Mathematica มาก

Video ที่ผมแชร์มานี้ก็เป็นเพียงตัวอย่างการใช้งาน notebook ของ Mathematica ให้เกิดประสิทธิภาพสูงสุด แต่ก็ยังมีอีกหลายความสามารถที่ไม่ได้พูดถึงครับ

ปัญหา Path ของ Rtools

rtools มันจำเป็นสำหรับ r package ที่มี code จากภาษาอื่น อย่าง c/c++ หรือ fortran ในที่จะต้องมีการ compile ระหว่างการติดตั้ง โดยปกติแล้วมัน จะถูกลงไว้ที่

PATH="C:\Rtools\bin;${PATH}" 

ถ้าลงไว้ที่อื่นและต้องการเรียกใช้ใน R ตัวแปรชื่อ BINPREF จะเป็นตัวแปรที่ R จะเรียกหา path ของ rtools ฉะนั้นถ้าจะเรียกใช้ rtools ที่ลงไว้ที่อื่นก็ต้องเซ็ต path ให้กับตัวแปรนี้ เช่น

BINPREF="X:/R/Rtools-3.5/mingw_$(WIN)/bin/" 

** สังเกตว่า BINPREF ใช้ forward slash นะครับ

R 3.5.1 กับ RLink

ดูเหมือนวิธีเรียกใช้งาน RLink (Mathematica < 11.3) กับ R เวอร์ชั่นใหม่ 3.5.1 จะมีปัญหา วิธีที่เริ่มจะมีการแชร์ก็คือให้เปลี่ยนไปใช้ JAVA ตัวที่มากับ rJava แทน แทนที่จะใช้ตัวที่ Mathematica มีมาให้ ดูตัวอย่างข้างล่างนี้ครับ

Needs["RLink`"]

JLink`UninstallJava[]

InstallR["RHomeLocation" -> 
  "C:\\Data-Work\\Programs\\R-3.5.1\\App\\R-Portable",
 "NativeLibLocation" -> 
  "C:\\Data-Work\\Programs\\R-3.5.1\\App\\R-Portable\\library\\rJava\\\
jri\\x64"]

REvaluate["R.Version()"]

ที่มา https://community.wolfram.com/groups/-/m/t/1381936

The dynamics of Plasmodium falciparum during the expansion phase of the asexual stage of infection

The dynamics of Plasmodium falciparum during the expansion phase of the asexual stage of infection

https://www.wolframcloud.com/objects/sompob/models/NJWandImmune.nb