Ns

จะพล็อตเมทริกซ์ความสับสนโดยใช้แผนที่ความร้อนใน R ได้อย่างไร

How Plot Confusion Matrix Using Heatmaps R



สารละลาย:

คุณสามารถบรรลุผลลัพธ์ที่ดีได้โดยใช้ggplot2 แต่สำหรับสิ่งนั้น คุณต้องมี data.frame ที่มี 3 คอลัมน์สำหรับ x, y และค่าที่จะลงจุด

โดยใช้รวบรวมจากเครื่องมือ tidyr มันง่ายมากที่จะฟอร์แมตข้อมูลของคุณ:



library('dplyr') library('tidyr') # กำลังโหลดตัวอย่างของคุณ ชื่อแถวควรมีคอลัมน์ของตัวเอง (ในที่นี้ `y`) หืม<- readr::read_delim('y a b c d e f g h i j a 5 4 0 0 0 0 0 0 0 0 b 0 0 0 0 0 0 0 0 0 0 c 0 0 4 0 0 0 0 0 0 0 d 0 0 0 0 0 0 0 0 0 0 e 2 0 0 0 2 0 0 0 0 0 f 1 0 0 0 0 2 0 0 0 0 g 0 0 0 0 0 0 0 0 0 0 h 0 0 0 0 0 0 0 0 0 0 i 0 0 0 0 0 0 0 0 0 0 j 0 0 0 0 0 0 0 0 0 0', delim=' ') # Gathering columns a to j hm % gather(x, value, a:j) # hm now looks like: # # A tibble: 100 x 3 # y x value # # 1 a a 5 # 2 b a 0 # 3 c a 0 # 4 d a 0 # 5 e a 2 # # ... with 95 more rows  

สมบูรณ์แบบ! มาวางแผนกันเถอะ geom พื้นฐานสำหรับแผนที่ความร้อนด้วย ggplot2 isgeom_tile ซึ่งเราจะมอบความสวยงามให้NS,y และเติม.



ไลบรารี ('ggplot2') ggplot (hm, aes (x = x, y = y, เติม = ค่า)) + geom_tile ()

ลองครั้งแรกที่แผนที่ความร้อน



ตกลงไม่เลวร้ายเกินไป แต่เราสามารถทำได้ดีกว่ามาก อันดับแรก เราอาจต้องการกลับแกน y เคล็ดลับคือให้ x และ y เป็นปัจจัยที่มีระดับที่เรียงลำดับตามที่เราต้องการ

hm % mutate(x = factor(x), # ลำดับตามตัวอักษรโดยปริยาย y = factor(y, levels = rev(unique(y)))) # บังคับย้อนกลับตามลำดับตัวอักษร

แล้วฉันก็ชอบธีมขาวดำtheme_bw() ซึ่งกำจัดพื้นหลังสีเทา ฉันยังชอบที่จะใช้จานสีจากRColorBrewer (กับทิศทาง = 1 เพื่อให้ได้สีเข้มขึ้นสำหรับค่าที่สูงกว่า)

เนื่องจากคุณกำลังวางแผนสิ่งเดียวกันบนx และแกน y คุณอาจต้องการมาตราส่วนแกนเท่ากัน:coord_equal() จะให้พล็อตสี่เหลี่ยมจัตุรัสแก่คุณ



ggplot(hm, aes(x=x, y=y, fill=value)) + geom_tile() + theme_bw() + coord_equal() + scale_fill_distiller(palette='Greens', direction=1) # จานสีอื่นที่ใช้ได้: สีแดง , บลูส์, สเปกตรัม, RdYlBu (แดง-เหลือง-น้ำเงิน), ...

แผนที่ความร้อนที่ดีขึ้น

สัมผัสสุดท้าย: พิมพ์ค่าที่ด้านบนของไทล์และลบคำอธิบายเนื่องจากไม่มีประโยชน์อีกต่อไป เห็นได้ชัดว่านี่เป็นทางเลือกทั้งหมด แต่จะช่วยให้คุณสร้างวัสดุได้ บันทึกgeom_text สืบทอดx และสวยงามตั้งแต่ถูกส่งผ่านไปยังggplot

ggplot(hm, aes(x=x, y=y, fill=value)) + geom_tile() + theme_bw() + coord_equal() + scale_fill_distiller(palette='Greens', direction=1) + guides(fill=F) ) + # ลบคำอธิบายสำหรับ `fill` labs (title = 'Value distribution') + # ใช้ชื่อแทน geom_text(aes(label=value), color='black') # ค่าการพิมพ์

แผนที่ความหนาแน่นสุดท้าย

คุณยังสามารถผ่านcolor='black' ถึงgeom_tile เพื่อวาดเส้น (สีดำ) รอบกระเบื้อง พล็อตสุดท้ายกับโครงร่างสี RdYlBu (ดูRColorBrewer::display.brewer.all() สำหรับรายการจานสีที่พร้อมใช้งาน

แสดงตัวเลือกเพิ่มเติม


อย่างที่เกร็กบอกภาพน่าจะเป็นวิธีที่จะไป:

z = ค(5,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0, 0,0, 1,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0) z = matrix(z, ncol=10) colnames(z) = c('a','b','c','d','e','f','g',' h','i', 'j') rownames(z) = c('a','b','c','d','e','f','g','h', 'i', 'j') ## เพื่อให้ได้การหมุนโครงภาพที่ถูกต้อง ## เราต้องพลิกภาพพล็อต (z[,ncol(z):1], axes=FALSE) ##Add ในแกน y ฉลาก แนวคิดที่คล้ายกันสำหรับแกน x แกน(2, at = seq(0, 1, length=length(colnames(z)))), labels=colnames(z))

คุณอาจต้องการดูฟังก์ชั่นแผนที่ความร้อน:

แผนที่ความร้อน(t(z)[ncol(z)::1,], Rowv=NA, Colv=NA, col = heat.colors(256))