ggplot vs Mathematica

หลังๆมานี้ผมใช้งาน ggplot เยอะพอสมควรด้วยความที่มัน plot แล้วลงสีค่าตัวแปรที่ผมต้องการได้ง่าย อย่างเช่นในตัวอย่างนี้ จากชุดข้อมูล iris ผม plot จุดโดยแกน x คือ sepal length และ y คือ sepal width แล้วให้ลงสีตาม species เพื่อที่เราจะได้เห็นว่าแต่ล่ะ species แต่กต่างกันอย่างไร ใน ggplot ผมเพียงแค่บอกว่า แกน x y คือค่าอะไร และลงสีโดยอาศัยค่าจากตัวแปลใด ซึ่งมันดูง่ายมากครับ

กลับมาที่ตัว Mathematica ที่ผมใช้อยู่ประจำต้องบอกเลยครับการจะทำแบบที่ ggplot ทำได้นั้นมันก็ไม่ยากเลยแต่ต้องเขียน code เพิ่มนิดหน่อยในการที่ให้ได้ list ของจุดในแต่ล่ะ species แล้ว plot รวมกันหรือจะแยก plot คนล่ะสีแล้วใช้คำสั่ง Show เอามาซ้อนๆกันได้ ซึ่งผมเองดูแล้วมันก็ค่อนข้างยุ่งพอสมควร แต่ผมก็มาพบด้วยความบังเอิญว่า เราสามารถใช้ Dataset กับคำสั่งพวก plot กราฟ ต่างๆได้ และมันก็ลงสีให้อัตโนมัติด้วย เช่นเพื่อให้ได้กราฟแบบที่ ggplot ทำได้ผมก็แค่ group มันด้วย species ก่อนแล้วเลือก แกนที่จะนำมา plot เช่น

มันทำให้ผมประหลาดใจมาครับที่ Mathematica ทำแบบนี้ได้ตั้งนานแล้ว และผมเองก็เพิ่งรู้ 555

CUDALink in Dell Precision 3581

เพิ่งลงใช้งาน Mathematica 13.3 ในเครื่อง Dell Precision M3581 แต่ติดปัญหาว่าพอใช้คำสั่ง CUDAQ[] แล้วมันขึ้นว่า False ทั้งที่เรามีตัวdriverและtoolsล่าสุดของ CUDA พอลองปรับเปลี่ยนก็เจอว่าหนึ่งในตัวที่ควบคุมก็คือ NVIDIA Control Panel

ซึ่งถ้าใครเจอปัญหานี้ให้ไปที่ NVIDIA Control Panel -> Workstation -> Manage GPU Utilization แล้วเลือก Use for Graphics and compute needs

มิกกี้เม้าส์ใน R

วาด Mickey mouse ใน R

library(showtext)
library(ggplot2)

font_add("TH Mali Grade 6", 
"PATH_to_/TH Mali Grade6.ttf")

showtext_auto()
# Define the functions for x(t) and y(t)
x_func <- function(t) {
  -119/9 * sin(1/10 - 25 * t) - 945/43 * sin(5/11 - 23 * t) - 501/8 * sin(1/47 - 10 * t) - 
    801/20 * sin(13/10 - 8 * t) - 607/10 * sin(7/10 - 7 * t) - 1975/9 * sin(3/7 - 2 * t) + 
    4655/8 * sin(t + 29/10) + 773/7 * sin(3 * t + 76/17) + 1138/9 * sin(4 * t + 1/3) + 
    619/4 * sin(5 * t + 5/8) + 3355/26 * sin(6 * t + 13/10) + 595/9 * sin(9 * t + 28/11) + 
    905/9 * sin(11 * t + 40/11) + 149/10 * sin(12 * t + 7/11) + 153/5 * sin(13 * t + 2) + 
    127/8 * sin(14 * t + 13/6) + 225/8 * sin(15 * t + 3/2) + 49/4 * sin(16 * t + 25/7) + 
    133/9 * sin(17 * t + 15/8) + 301/15 * sin(18 * t + 31/9) + 232/7 * sin(19 * t + 11/7) + 
    438/19 * sin(20 * t + 10/7) + 67/3 * sin(21 * t + 19/10) + 114/11 * sin(22 * t + 38/37) + 
    153/11 * sin(24 * t + 10/9) + 153/8 * sin(26 * t + 11/12) + 443/34 * sin(27 * t + 23/14) + 
    39/7 * sin(28 * t + 45/11) + 32/3 * sin(29 * t + 4/11) + 110/13 * sin(30 * t + 3/8) + 
    41/7 * sin(31 * t + 70/23) + 39/7 * sin(32 * t + 13/9)
}

y_func <- function(t) {
  -86/19 * sin(6/7 - 30 * t) - 89/8 * sin(2/3 - 29 * t) - 687/49 * sin(4/9 - 24 * t) - 
    294/11 * sin(11/8 - 20 * t) - 135/4 * sin(10/11 - 17 * t) - 71/7 * sin(1/6 - 15 * t) - 
    226/5 * sin(3/8 - 14 * t) - 295/8 * sin(1/8 - 11 * t) - 220/7 * sin(17/16 - 10 * t) - 
    708/7 * sin(1/6 - 9 * t) - 2017/8 * sin(5/4 - 2 * t) - 1240/3 * sin(11/10 - t) + 
    104/15 * sin(18 * t) + 2216/7 * sin(3 * t + 39/11) + 601/3 * sin(4 * t + 18/11) + 
    468/11 * sin(5 * t + 34/11) + 127/7 * sin(6 * t + 27/7) + 457/8 * sin(7 * t + 25/6) + 
    201/4 * sin(8 * t + 23/7) + 71/3 * sin(12 * t + 4/7) + 340/7 * sin(13 * t + 39/11) + 
    216/7 * sin(16 * t + 27/13) + 31/5 * sin(19 * t + 24/25) + 8/5 * sin(21 * t + 1/7) + 
    217/11 * sin(22 * t + 23/14) + 34/3 * sin(23 * t + 19/8) + 157/9 * sin(25 * t + 3/10) + 
    69/4 * sin(26 * t + 2/3) + 29/5 * sin(27 * t + 15/7) + 58/7 * sin(28 * t + 29/8) + 
    95/11 * sin(31 * t + 19/8) + 34/9 * sin(32 * t + 40/9)
}

# Generate values
t_values <- seq(0, 2 * pi, length.out = 1000)
x_values <- sapply(t_values, x_func)
y_values <- sapply(t_values, y_func)

df <- data.frame(t = t_values, x = x_values, y = y_values)

# Plot using ggplot2
p <- ggplot(df, aes(x = x, y = y)) + 
  geom_path(color = "black", size = 1) + 
  theme_minimal() + 
  geom_text(aes(x = 500, y = 800, label = "กลุ่มผู้ใช้ R"), 
            family = "TH Mali Grade 6", color = "black", size = 26)

print(p)

เรียน R Shiny

สำหรับผู้ที่สนใจจะพัฒนาเว็บและแอปใน R ด้วย Shiny ครับ เนื้อหาที่ผมสอนใน workshop ซึ่งเป็นภาษาไทย ได้ถูกเผยแพร่ไว้ที่นี่ Shiny เบื้องต้น (ammnet-thailand.github.io) ครับ

%d bloggers like this: