Категориальный график пузырьков для картографических исследований
Как создать категориальный график пузырьков с использованием GNU R, аналогичный тому, который используется в систематических картинговых исследованиях (см. ниже)?
![categorical bubble plot used in mapping studies]()
EDIT: хорошо, вот что я пробовал до сих пор. Во-первых, мой набор данных (Var1 переходит на ось x, Var2 переходит на ось y):
> grid
Var1 Var2 count
1 Does.Not.apply Does.Not.apply 53
2 Not.specified Does.Not.apply 15
3 Active.Learning..general. Does.Not.apply 1
4 Problem.based.Learning Does.Not.apply 2
5 Project.Method Does.Not.apply 4
6 Case.based.Learning Does.Not.apply 22
7 Peer.Learning Does.Not.apply 6
10 Other Does.Not.apply 1
11 Does.Not.apply Not.specified 15
12 Not.specified Not.specified 15
21 Does.Not.apply Active.Learning..general. 1
23 Active.Learning..general. Active.Learning..general. 1
31 Does.Not.apply Problem.based.Learning 2
34 Problem.based.Learning Problem.based.Learning 2
41 Does.Not.apply Project.Method 4
45 Project.Method Project.Method 4
51 Does.Not.apply Case.based.Learning 22
56 Case.based.Learning Case.based.Learning 22
61 Does.Not.apply Peer.Learning 6
67 Peer.Learning Peer.Learning 6
91 Does.Not.apply Other 1
100 Other Other 1
Затем, пытаясь построить данные:
# Based on http://flowingdata.com/2010/11/23/how-to-make-bubble-charts/
grid <- subset(grid, count > 0)
radius <- sqrt( grid$count / pi )
symbols(grid$Var1, grid$Var2, radius, inches=0.30, xlab="Research type", ylab="Research area")
text(grid$Var1, grid$Var2, grid$count, cex=0.5)
Здесь результат: ![What I've got]()
Проблемы: метки меток неправильны, пунктирные линии сетки отсутствуют.
Ответы
Ответ 1
Вот решение ggplot2. Во-первых, добавлен радиус в качестве новой переменной в ваш фрейм данных.
grid$radius <- sqrt( grid$count / pi )
Вы должны поиграть с размером точек и текстовых меток внутри сюжета, чтобы идеально подойдет.
library(ggplot2)
ggplot(grid,aes(Var1,Var2))+
geom_point(aes(size=radius*7.5),shape=21,fill="white")+
geom_text(aes(label=count),size=4)+
scale_size_identity()+
theme(panel.grid.major=element_line(linetype=2,color="black"),
axis.text.x=element_text(angle=90,hjust=1,vjust=0))
![enter image description here]()
Ответ 2
Здесь версия, использующая levelplot
из latticeExtra
.
library(latticeExtra)
levelplot(count~Var1*Var2,data=dat,
panel=function(x,y,z,...)
{
panel.abline(h=x,v=y,lty=2)
cex <- scale(z)*3
panel.levelplot.points(x,y,z,...,cex=5)
panel.text(x,y,label=z,cex=0.8)
},scales=(x=list(abbreviate=TRUE))) ## to get short labels
![enter image description here]()
Чтобы получить размер пузыря, пропорциональный счету, вы можете сделать это
library(latticeExtra)
levelplot(count~Var1*Var2,data=dat,
panel=function(x,y,z,...)
{
panel.abline(h=x,v=y,lty=2)
cex <- scale(z)*3
panel.levelplot.points(x,y,z,...,cex=5)
panel.text(x,y,label=z,cex=0.8)
})
Я не показываю его, так как рендеринг не ясен, как в случае с размером исправления.
Ответ 3
Это поможет вам начать с добавления меток на ваш xaxis.
Чтобы добавить строки, просто добавьте строку на каждом уровне
ggs <- subset(gg, count > 0)
radius <- sqrt( ggs$count / pi )
# ggs$Var1 <- as.character(ggs$Var1)
# set up your tick marks
# (this can all be put into a single line in `axis`, but it placed separate here to be more readable)
#--------------
# at which values to place the x tick marks
x_at <- seq_along(levels(gg$Var1))
# the string to place at each tick mark
x_labels <- levels(gg$Var1)
# use xaxt="n" to supress the standard axis ticks
symbols(ggs$Var1, ggs$Var2, radius, inches=0.30, xlab="Research type", ylab="Research area", xaxt="n")
axis(side=1, at=x_at, labels=x_labels)
text(ggs$Var1, ggs$Var2, ggs$count, cex=0.5)
также обратите внимание, что вместо вызова объекта grid
я назвал его gg
, а затем ggs
для подмножества. grid
является функцией в R
. Хотя "разрешено" перезаписывать функцию объектом, это не рекомендуется и может привести к раздражающим ошибкам по линии.