我有一个混淆矩阵,以便:
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
其中字母表示类标签。
我只需绘制混淆矩阵。我搜索了几个工具。 R中的热图看起来像我需要的。由于我对R一无所知,因此很难对样本进行更改。如果有人能帮助我很快画画,我将非常感激。或者任何其他建议而不是热图也是受欢迎的。 我知道有很多关于此的样本,但我仍然无法用我自己的数据绘制。
答案 0 :(得分:2)
正如格雷格所说,image
可能是要走的路:
z = c(5,4,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)
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")
##To get the correct image plot rotation
##We need to flip the plot
image(z[,ncol(z):1], axes=FALSE)
##Add in the y-axis labels. Similar idea for x-axis.
axis(2, at = seq(0, 1, length=length(colnames(z))), labels=colnames(z))
您可能还想查看heatmap
功能:
heatmap(t(z)[ncol(z):1,], Rowv=NA,
Colv=NA, col = heat.colors(256))
答案 1 :(得分:2)
使用Extracted 100, 50, 12,5, 11/11/2018, 1, somefreetext
可以获得不错的结果,但是为此,您需要一个data.frame,该数据帧具有3列,分别用于x,y和要绘制的值。
使用ggplot2
工具中的gather
可以很容易地重新格式化数据:
tidyr
完美!让我们绘图。 ggplot2的热图的基本几何是library("dplyr")
library("tidyr")
# Loading your example. Row names should get their own column (here `y`).
hm <- 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 <- hm %>% gather(x, value, a:j)
# hm now looks like:
# # A tibble: 100 x 3
# y x value
# <chr> <chr> <dbl>
# 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_tile
,x
和y
。
fill
还不错,但是我们可以做得更好。首先,我们可能想反转y轴。诀窍是提供x和y作为因子,并根据需要对它们进行排序。
library("ggplot2")
ggplot(hm, aes(x=x, y=y, fill=value)) + geom_tile()
然后,我喜欢摆脱灰色背景的黑白主题hm <- hm %>%
mutate(x = factor(x), # alphabetical order by default
y = factor(y, levels = rev(unique(y)))) # force reverse alphabetical order
。我还喜欢使用theme_bw()
中的调色板(与RColorBrewer
一起使用以获得更深的颜色以获得更高的值)。
由于要在direction = 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)
# Other valid palettes: Reds, Blues, Spectral, RdYlBu (red-yellow-blue), ...
继承了geom_text
和x
的美学,因为它们被传递给y
。
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) + # removing legend for `fill`
labs(title = "Value distribution") + # using a title instead
geom_text(aes(label=value), color="black") # printing values
传递到color="black"
,以在图块周围绘制(黑色)线条。使用geom_tile
配色方案的最终绘图(有关可用调色板的列表,请参见RdYlBu
。
答案 2 :(得分:1)
R中的image
函数将采用矩阵并根据矩阵中的值绘制带有颜色的规则网格。您可以设置很多选项,但只需使用矩阵作为唯一参数调用图像将创建基本图。听起来这是一个很好的起点。
答案 3 :(得分:0)