2015-10-16 10 views
-1

Как визуализировать трехмерную матрицу?Как визуализировать трехмерную матрицу?

  • первое измерение координаты х = различные университеты
  • Второе измерение координаты у = дисциплин или специальностей (Физика, Математика, Искусство ...)
  • третье измерение цветная = разные годы
  • размер кругов = количество работ в соответствующей дисциплине/университет
+1

Имеет ли этот тип диаграммы имя или оно выполнено на заказ? Вы спрашиваете, как создать аналогичный тип диаграммы в R? Если вы знаете тип диаграммы, вы можете найти, какой пакет может его создать. –

+0

Похоже, у вас также есть 4-е измерение размера кругов ... – Rodrigo

+0

@Rodrigo, количество документов = размер кругов; color = years – perlatex

ответ

0

Вы можете сделать что-то вроде

fulldata <- read.csv(...) # your data.frame 
colors=c(...) # create your color array here 
plot(NULL,xlim=1:9,ylim=1:20) # just to define the area of the graph 
abline(v=1:9,h=1:20) # the axis inside the graph 
for (y in 2013:2002) { 
    data <- fulldata[which(fulldata$year == y),] 
    circle(data$university,data$discipline,size=data$numberofpapers,col=year[y-2001]) 
} 
axis(...) # or mtext or whatever to put the labels on the axis 
+0

Я очень хочу иметь демоверсию для визуализации 4-мерной матрицы – perlatex

1

Если у вас есть данные, такие как:

set.seed(911) 
mat = tapply(sample(0:200, 5*10*16, TRUE, prob = rev(prop.table(0:200))), 
      expand.grid(univ = paste("univ", 1:5, sep = ""), 
         dis = paste("dis", 1:10, sep = ""), 
         yr = 2000:2015), 
      I) 

Вы могли бы попробовать что-то вдоль линий:

#convert to easy to manipulate format    
DF = as.data.frame(as.table(mat)) 

#x 
xlvs = unique(DF$univ) 
xx = match(DF$univ, xlvs) 

#y 
ylvs = unique(DF$dis) 
yy = match(DF$dis, ylvs) 

#colors 
collvs = unique(DF$yr) 
cols = terrain.colors(length(collvs), alpha = 0.75)[match(DF$yr, collvs)] 

#sizes 
maxcex = 5 
cexs = (DF$Freq * maxcex)/max(DF$Freq) 


layout(matrix(c(1, 1, 1, 1, 1, 2), nrow = 1)) 
#plot 1 
plot(xx, yy, col = cols, cex = cexs, pch = 19, axes = FALSE, frame.plot = TRUE) 
axis(1, at = seq_along(xlvs), labels = xlvs) 
axis(2, at = seq_along(ylvs), labels = ylvs, las = 1) 

#plot 2 
par(mar = c(1, 1, 1, 4)) 
fill = terrain.colors(length(collvs) * 9, alpha = 0.75) #higher 'resolution' of plot 
barplot(matrix(rep_len(1L, length(fill))), col = fill, border = NA, axes = FALSE) 
axis(4, at = seq(1, length(fill), 9) + 4, labels = collvs, las = 1) 

Что дает: enter image description here

+0

спасибо @alexis_laz, вы очень сердечный человек, – perlatex

2

Использование @alexis_ Пример данных Лаз:

данные реорганизовать быть ggplot2 содружественная:

library("reshape2") 
mm <- melt(mat) 

Загрузка пакетов (включая viridis для красивее цветов):

library("ggplot2"); theme_set(theme_bw()) 
library("viridis") 

Участок по запросу (игра с размером не колеблется, пока вы как результат):

ggplot(mm)+ 
    geom_point(aes(x=univ,y=dis,colour=yr, size=value))+ 
     scale_color_viridis()+ 
      scale_size(range=c(2,18)) 

enter image description here Однако ggplot2 дает вам много свободы, и я бы посоветовал обратить внимание на Cleveland hierarchy, в котором говорится, что трудно отличить количественные характеристики, построенные по размеру. В зависимости от того, что сравнения вы больше всего интересует, вы можете попробовать что-то вроде этого:

library(grid) ## for unit(), to squash panels 
ggplot(mm,aes(x=yr,y=value,colour=univ))+ 
    geom_point()+geom_line()+ 
     facet_wrap(~dis)+ 
      scale_color_brewer(palette="Set1")+ 
       theme(panel.margin=unit(0,"lines")) 

enter image description here

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

+0

код очень крут, обязательно научитесь. Большое спасибо. – perlatex

0

==================== ============ данные

Num Univ Дис цитируемой

год

1 Пекин Физика 193 4555 2005

2 Пекин Физика 197 2799 2006

3 Пекин Физика 240 2664 2007

4 Пекин Физика 200 3191 2008

5 Пекин Физика 268 2668 2009

6 Beijing Physics 249 2300 2010

7 Пекин Физика 262 2080 2011

8 Beijing Физика 230 2371 2012

9 Пекин Physics 309 1367 2013

10 Пекинская физика 284 615 2014

11 Beijing Chemistry 143 165 0 2005

12 Пекин Химия 149 2379 2006

13 Пекин Химия 190 2566 2007

14 Beijing Chemistry 147 1888 2008

15 Пекин Химия 184 2146 2009

16 Пекин Химия 214 2568 2010

---

mm <- read.table("data.txt", header = TRUE, sep = "", encoding='UTF-8') 

    library("ggplot2") 
    theme_set(theme_bw()) 
    library("viridis") 

    ggplot(mm)+ 
    geom_point(aes(x=univ,y=dis,colour=year, size=paper))+ 
    scale_color_viridis()+ 
    scale_size(range=c(2,18)) 

================================================================================================================== ============= , но год становится 2005.0 2007.5 2010.0 2012.5 enter image description here

+0

@Ben Bolker, пожалуйста, помогите мне – perlatex