【问题标题】:Plot MNIST digits with ggplot2用 ggplot2 绘制 MNIST 数字
【发布时间】:2018-12-13 21:01:06
【问题描述】:

我想使用 ggplot2 绘制 MNIST 数字。

我试过了,但我把数字旋转了 90 度。下面的代码是绘制数据集中对应于 2 的第二个数字。

trainData = read.csv(file = url("@987654321@")) df = expand.grid(y = 0:27, x = 0:27) df$col = unlist(trainData[2, -c(1,2)]) ggplot(df, aes(x, y)) + geom_tile(aes(fill = col))

如果可能,请在您的解决方案中考虑我计划将其扩展为使用facet_gridfacet_wrap 绘制数字矩阵。我想以一个函数结束,我将传递一个行向量,该函数将从数据集中获取这些行并创建一个图矩阵(每个数字一个)。

谢谢!

【问题讨论】:

  • 你看过?geom_tile ...吗?即使使用该功能,也不一定是您会做的事情。说“请考虑一个更一般的情况”的问题,然后没有提供用于说明解决方案的数据集,基本上是不清楚的。 (看起来太像要求为我的口味做机器学习作业的请求。)
  • 是的,我查看了?geom_tile 并没有看到任何可以让我旋转绘制的矩阵的参数。如果您看到我提供的数据集,您会看到它包含多个图像,因此如果您愿意,可以使用此数据集说明一般解决方案。 (不,这不是机器学习作业;我已经知道如何使用基本 R 函数(图像)绘制数字,但想使用 ggplot2 来绘制)。如果您知道如何解决轮换问题,请提供一些有关如何解决该问题的指导或使用geom_tile 参数。

标签: r ggplot2


【解决方案1】:

mnistkeras 包中的内置数据集。

这是一个带有 ggplot2tidyverse 函数的示例图:
为了使geom_tile 工作,我们需要对数据进行一些转换。

library(keras)
library(dplyr)
library(tibble)
library(tidyr)
library(stringr)

mnist <- keras::dataset_mnist()

mnist$test$x[sample(1:100,1), 1:28, 1:28] %>%
                as_data_frame() %>% 
                rownames_to_column(var = 'y') %>% 
                gather(x, val, V1:V28) %>%
                mutate(x = str_replace(x, 'V', '')) %>% 
                mutate(x = as.numeric(x),
                       y = as.numeric(y)) %>% 
                mutate(y = 28-y) %>%
                ggplot(aes(x, y))+
                geom_tile(aes(fill = val+1))+
                coord_fixed()+
                theme_void()+
                theme(legend.position="none")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    • 2021-02-21
    • 1970-01-01
    • 2018-04-08
    相关资源
    最近更新 更多