ostatecznego wdrożenia - nie skończył, ale pozycja właściwa drogaDziałka/ggplot2 - Wypełnij obszar ze zbyt wielu punktów
idea/Problem: masz działkę z wielu nakładających się punktów i chcą je zastąpić obszar prosty, co zwiększa wydajność wyświetlania działki.
Możliwe wdrożenie: Oblicz macierz odległości między wszystkimi punktami i połącz wszystkie punkty poniżej określonej odległości.
Todo/Not finished: Ten aktualnie działa dla ręcznie ustawionych odległości w zależności od wielkości drukowanego wykresu. Zatrzymałem się tutaj, ponieważ wynik nie spełnił mojego estetycznego zmysłu.
minimalna przykład przy powierzchniach pośrednich
set.seed(074079089)
n.points <- 3000
mat <- matrix(rnorm(n.points*2, 0,0.2), nrow=n.points, ncol=2)
colnames(mat) <- c("x", "y")
d.mat <- dist(mat)
fit.mat <-hclust(d.mat, method = "single")
lims <- c(-1,1)
real.lims <- lims*1.1 ## ggplot invokes them approximately
# An attempt to estimate the point-sizes, works for default pdfs pdf("test.pdf")
cutsize <- sum(abs(real.lims))/100
groups <- cutree(fit.mat, h=cutsize) # cut tree at height cutsize
# plot(fit.mat) # display dendogram
# draw dendogram with red borders around the 5 clusters
# rect.hclust(fit.mat, h=cutsize, border="red")
library(ggplot2)
df <- data.frame(mat)
df$groups <- groups
plot00 <- ggplot(data=df, aes(x,y, col=factor(groups))) +
geom_point() + guides(col=FALSE) + xlim(lims) + ylim(lims)+
ggtitle("Each color is a group")
pdf("plot00.pdf")
print(plot00)
dev.off()
# If less than 4 points are connected, show them seperately
t.groups <- table(groups) # how often which group
drop.group <- as.numeric(names(t.groups[t.groups<4])) # groups with less than 4 points are taken together
groups[groups %in% drop.group] <- 0 # in group 0
df$groups <- groups
plot01 <- ggplot(data=df, aes(x,y, col=factor(groups))) +
geom_point() + xlim(lims)+ ylim(lims) +
scale_color_hue(l=10)
pdf("plot01.pdf")
print(plot01)
dev.off()
find_hull <- function(df_0)
{
return(df_0[chull(df_0$x, df_0$y), ])
}
library(plyr)
single.points.df <- df[df$groups == 0 , ]
connected.points.df <- df[df$groups != 0 , ]
hulls <- ddply(connected.points.df, "groups", find_hull) # for all groups find a hull
plot02 <- ggplot() +
geom_point(data=single.points.df, aes(x,y, col=factor(groups))) +
xlim(lims)+ ylim(lims) +
scale_color_hue(l=10)
pdf("plot02.pdf")
print(plot02)
dev.off()
plot03 <- plot02
for(grp in names(table(hulls$groups)))
{
plot03 <- plot03 + geom_polygon(data=hulls[hulls$groups==grp, ],
aes(x,y), alpha=0.4)
}
# print(plot03)
plot01 <- plot01 + theme(legend.position="none")
plot03 <- plot03 + theme(legend.position="none")
# multiplot(plot01, plot03, cols=2)
pdf("plot03.pdf")
print(plot03)
dev.off()
początkowe pytanie
mam (może nieparzyste) pytanie.
W niektórych działkach mam tysiące punktów w mojej analizie. Aby je wyświetlić, komputer zajmuje sporo czasu, ponieważ jest tak wiele punktów. Później wiele z tych punktów może się pokrywać, mam wypełniony obszar (co jest w porządku!). Aby zaoszczędzić czas/wysiłek wyświetlania, dobrze byłoby po prostu wypełnić ten obszar, ale wykreślając każdy punkt na własną rękę.
Wiem, że są możliwości w mapach termicznych i tak dalej, ale nie o to mi chodzi. Mój pomysł jest taki:
#plot00: ggplot with many many points and a filled area of points
plot00 <- plot00 + fill.crowded.areas()
# with plot(), I sadly have an idea how to manage it
Jakieś pomysły? Czy to nic, co każdy zrobiłby w dowolnym momencie?
# Example code
# install.packages("ggplot2")
library(ggplot2)
n.points <- 10000
mat <- matrix(rexp(n.points*2), nrow=n.points, ncol=2)
colnames(mat) <- c("x", "y")
df <- data.frame(mat)
plot00 <- ggplot(df, aes(x=x, y=y)) +
theme_bw() + # white background, grey strips
geom_point(shape=19)# Aussehen der Punkte
print(plot00)
# NO ggplot2
plot(df, pch=19)
Edit:
Aby Density-działek jak wspomniano przez fdetsch (jak mogę zaznaczyć nazwę?) Istnieją pewne pytania dotyczące tego produktu temat. Ale to nie jest to, czego chcę dokładnie. Wiem, że moja troska jest nieco dziwna, ale gęstość sprawia, że w razie potrzeby fabuła staje się bardziej zajęta.
Linki do tematów z gęstościach:
Scatterplot with too many points
High Density Scatter Plots
co prosisz jest trudne, ponieważ renderowanie stały blok zależy od parametrów graficznych (np. wielkości punktu), które wybierasz. Aby utworzyć obszary bryłowe, należy buforować punkty w jedną warstwę w taki sam sposób, jak system informacji geograficznej - [to pytanie] (https://stackoverflow.com/questions/25411251/buffer-geospatial-points-in-r -with-gbuffer) może pomóc. – geotheory