Nano Hash - криптовалюты, майнинг, программирование

в R, как построить двоичную таблицу (тип шахматной доски)

У меня есть простая матрица, как это

 >df
           School1  School2 School3
 Program1        1        1       1
 Program2        1        0       1 
 Program3        1        1       0

Цифра 1 означает, что школа получила программу, а цифра ноль – нет. Я хотел бы построить простой квадрат, например, шахматную доску (черный для 1 и белый для 0). Сначала я плавлю свой df

df<- melt(df)

head(df)
         X1       X2 value
1 Program 1 School 1     1
2 Program 2 School 1     1
3 Program 3 School 1     1
4 Program 1 School 2     1
5 Program 2 School 2     0
6 Program 3 School 2     0

names(df)[1]<- "Var1"
names(df)[2]<- "Var2"

Теперь я создаю свою доску

ggplot(df, aes(x=Var2, y=Var1, fill=value)) + geom_tile() +
theme(panel.background = element_blank(),
      #panel.grid.major = element_line(colour = "orange", size=2),
      panel.grid.minor = element_line(colour = "gray" , size = 3)) 

В результате получается следующее изображение: введите здесь описание изображения

Но я хотел бы сделать некоторые вещи:

1.- добавить серую сетку над графиком, указывающую на разделение каждого квадрата

2.- манипулировать цветным квадратом (черно-белым)

3.- управлять размером меток на осях (Программа 1, Программа 2,... Школа 1, Школа 2,...) и их наклоном (например, las = 2 в гистограмме)

4.- Отредактируйте легенду панели (Да с черным квадратиком и Нет с белым квадратиком)

5.- Исключить имена осей (Var1 и Var)

13.09.2015

  • Обратите внимание, что вы можете просто использовать image(df, col=c('black', 'white')) в исходном фрейме данных, нет необходимости использовать плавление и т. д. 14.09.2015
  • ты искал? stackoverflow.com/questions/28035831/ 14.09.2015

Ответы:


1
library(ggplot2)

dat <- read.table(text="Program School1  School2 School3
 Program1        1        1       1
 Program2        1        0       1 
 Program3        1        1       0", header=TRUE, stringsAsFactors=FALSE)

dat_long <- reshape2::melt(dat)

# discrete vs continuous
dat_long$value <- factor(dat_long$value)

gg <- ggplot(dat_long)

# fill + legend, gray border
gg <- gg + geom_tile(aes(x=Program, y=variable, fill=value), color="#7f7f7f")

# custom fill colors
gg <- gg + scale_fill_manual(values=c("white", "black"))

# squares
gg <- gg + coord_equal()

# no labels
gg <- gg + labs(x=NULL, y=NULL)

# remove some chart junk
gg <- gg + theme_bw()
gg <- gg + theme(panel.grid=element_blank())
gg <- gg + theme(panel.border=element_blank())
gg

введите здесь описание изображения

Меняйте программу на школу по мере необходимости.

13.09.2015

2

Я пытался сделать это с базовой графикой (используя heatmap()) и с (недооцененным) методом image. Ни то, ни другое не было таким легким, как мне бы хотелось.

Данные конструкции:

dat <- matrix(c(1,1,1,1,0,1,1,1,0),byrow=TRUE,nrow=3,
              dimnames=list(paste0("Program",1:3),
                            paste0("School",1:3)))

Использование Matrix

К сожалению, метод image (который в остальном очень удобен) не обрабатывает dimnames, так что нам придется немного повозиться.

library(Matrix)
library(lattice)
## getMethod("image",sig="dgTMatrix")  ## examine the function

Взломайте настройки метки галочки, чтобы сделать их прозрачными:

tp.orig <- trellis.par.get()
tp2 <- tp.orig
tp2$axis.text$alpha  <- 0
## optionally add space for vertical labels?
##  tp2$layout.heights$bottom.padding <- 20  
trellis.par.set(tp2)  

image(Matrix(dat),useRaster=TRUE,sub="",xlab="",ylab="")

Добавьте метки и сетку:

trellis.focus("panel",1,1,highlight=FALSE,clip.off=TRUE)
trellis.par.set(tp.orig)
dims <- dim(dat)
dn <- dimnames(dat)
panel.axis(side="bottom",at=1:dims[2],labels=dn[[2]],outside=TRUE,rot=0)
panel.axis(side="left",at=1:dims[1],labels=dn[[1]],outside=TRUE)
panel.grid(h=2,v=2)

Использование базовой графики

На самом деле я закончил тем, что использовал gplots. Можно еще немного подправить.

library("gplots")
par(oma=c(5,0,0,5))
heatmap.2(dat,dendrogram="none",col=c("gray","white"),
          key=FALSE,trace="both",tracecol="black",
          hline=numeric(0),vline=numeric(0))
14.09.2015
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..