Come dovrei presentare un piccolo grafico nell'angolo di un altro grafico in R?Disegno di un grafico nell'angolo di un altro
risposta
Ho fatto questo utilizzando qualcosa di simile:
# Making some fake data
plot1 <- data.frame(x=sample(x=1:10,10,replace=FALSE),
y=sample(x=1:10,10,replace=FALSE))
plot2 <- data.frame(x=sample(x=1:10,10,replace=FALSE),
y=sample(x=1:10,10,replace=FALSE))
plot3 <- data.frame(x=sample(x=1:10,10,replace=FALSE),
y=sample(x=1:10,10,replace=FALSE))
layout(matrix(c(2,1,1,3,1,1),2,3,byrow=TRUE))
plot(plot1$x,plot1$y)
plot(plot2$x,plot2$y)
plot(plot3$x,plot3$y)
I comandi matrix
e layout
consentono di organizzare grafici multipli in un unico appezzamento. Fondamentalmente, tu metti il numero di ogni trama (nell'ordine in cui lo chiamerai) in ogni cella, e poi qualunque sia la disposizione si finisce per essere il modo in cui i tuoi diagrammi sono disposti. Per esempio, nel caso di cui sopra, matrix(c(2,1,1,3,1,1),byrow=TRUE)
risultati in una matrice che assomiglia a questo:
[,1] [,2] [,3]
[1,] 2 1 1
[2,] 3 1 1
Quindi, si può finire con qualcosa di simile:
A cura di aggiungere:
Ok, quindi, se vuoi integrare un grafico nell'angolo, puoi farlo usando lo stesso comando layout
semplicemente cambiando la matrice. Per esempio, questo è un codice diverso:
layout(matrix(c(1,1,2,1,1,1),2,3,byrow=TRUE))
plot1 <- data.frame(x=1:10,y=c(9,10,8,7,3,4,1,2,5,6))
plot2 <- data.frame(x=1:10,y=c(6,7,5,1,2,8,3,10,9,4))
plot(plot1$x,plot1$y,type="o",col="red")
plot(plot2$x,plot2$y,type="o",xlab="",ylab="",main="",sub="",col="blue")
e la matrice risultante è:
[,1] [,2] [,3]
[1,] 1 1 2
[2,] 1 1 1
La trama che viene fuori assomiglia a questo:
@TAReham, grazie e se voglio un piccolo grafico all'interno di un altro? –
@Tareham per axample una trama piccola appena in alto e all'interno di un'altra trama? –
Modificata la risposta per mostrare un'alternativa. – TARehman
So che questa domanda è già chiuso, ma sto lanciando questo esempio per i posteri.
È possibile eseguire visualizzazioni personalizzate di questo tipo abbastanza facilmente con il pacchetto base "griglia" una volta individuate le nozioni di base. Ecco un rapido esempio di alcune funzioni personalizzate che uso insieme a una demo di tracciamento dei dati.
funzioni personalizzate
# Function to initialize a plotting area.
init_Plot <- function(
.df,
.x_Loc,
.y_Loc,
.justify,
.width,
.height
){
# Initialize plotting area to fit data.
# We have to turn off clipping to make it
# easy to plot the labels around the plot.
pushViewport(viewport(xscale=c(min(.df[,1]), max(.df[,1])), yscale=c(min(0,min(.df[,-1])), max(.df[,-1])), x=.x_Loc, y=.y_Loc, width=.width, height=.height, just=.justify, clip="off", default.units="npc"))
# Color behind text.
grid.rect(x=0, y=0, width=unit(axis_CEX, "lines"), height=1, default.units="npc", just=c("right", "bottom"), gp=gpar(fill=space_Background, col=space_Background))
grid.rect(x=0, y=1, width=1, height=unit(title_CEX, "lines"), default.units="npc", just=c("left", "bottom"), gp=gpar(fill=space_Background, col=space_Background))
# Color in the space.
grid.rect(gp=gpar(fill=chart_Fill, col=chart_Col))
}
# Function to finalize and label a plotting area.
finalize_Plot <- function(
.df,
.plot_Title
){
# Label plot using the internal reference
# system, instead of the parent window, so
# we always have perfect placement.
grid.text(.plot_Title, x=0.5, y=1.05, just=c("center","bottom"), rot=0, default.units="npc", gp=gpar(cex=title_CEX))
grid.text(paste(names(.df)[-1], collapse=" & "), x=-0.05, y=0.5, just=c("center","bottom"), rot=90, default.units="npc", gp=gpar(cex=axis_CEX))
grid.text(names(.df)[1], x=0.5, y=-0.05, just=c("center","top"), rot=0, default.units="npc", gp=gpar(cex=axis_CEX))
# Finalize plotting area.
popViewport()
}
# Function to plot a filled line chart of
# the data in a data frame. The first column
# of the data frame is assumed to be the
# plotting index, with each column being a
# set of y-data to plot. All data is assumed
# to be numeric.
plot_Line_Chart <- function(
.df,
.x_Loc,
.y_Loc,
.justify,
.width,
.height,
.colors,
.plot_Title
){
# Initialize plot.
init_Plot(.df, .x_Loc, .y_Loc, .justify, .width, .height)
# Calculate what value to use as the
# return for the polygons.
y_Axis_Min <- min(0, min(.df[,-1]))
# Plot each set of data as a polygon,
# so we can fill it in with color to
# make it easier to read.
for (i in 2:ncol(.df)){
grid.polygon(x=c(min(.df[,1]),.df[,1], max(.df[,1])), y=c(y_Axis_Min,.df[,i], y_Axis_Min), default.units="native", gp=gpar(fill=.colors[i-1], col=.colors[i-1], alpha=1/ncol(.df)))
}
# Draw plot axes.
grid.lines(x=0, y=c(0,1), default.units="npc")
grid.lines(x=c(0,1), y=0, default.units="npc")
# Finalize plot.
finalize_Plot(.df, .plot_Title)
}
codice Demo
grid.newpage()
# Specify main chart options.
chart_Fill = "lemonchiffon"
chart_Col = "snow3"
space_Background = "white"
title_CEX = 1.4
axis_CEX = 1
plot_Line_Chart(data.frame(time=1:1860, EuStockMarkets)[1:5], .x_Loc=1, .y_Loc=0, .just=c("right","bottom"), .width=0.9, .height=0.9, c("dodgerblue", "deeppink", "green", "red"), "EU Stocks")
# Specify sub-chart options.
chart_Fill = "lemonchiffon"
chart_Col = "snow3"
space_Background = "lemonchiffon"
title_CEX = 0.8
axis_CEX = 0.7
for (i in 1:4){
plot_Line_Chart(data.frame(time=1:1860, EuStockMarkets)[c(1,i + 1)], .x_Loc=0.15*i, .y_Loc=0.8, .just=c("left","top"), .width=0.1, .height=0.1, c("dodgerblue", "deeppink", "green", "red")[i], "EU Stocks")
}
Wow. Questo fa decisamente comparire la mia risposta al confronto. :) – TARehman
@TARehman La differenza principale, tuttavia, è che il metodo 'par' nella tua risposta può accettare le funzioni di tracciamento di base, mentre il metodo 'griglia' richiederà di specificare i propri metodi di tracciamento. È principalmente una questione di tempo e solo quanto personalizzato deve essere la tua trama. – Dinre
La domanda non è chiusa e l'OP ha sicuramente la possibilità di cambiare la propria scelta su quale risposta ottiene il segno di spunta. – Dason
È inoltre possibile utilizzare par(fig=..., new=TRUE)
.
x <- rnorm(100)
hist(x, col = "light blue")
par(fig = c(.7, .95, .7, .95), mar=.1+c(0,0,0,0), new = TRUE)
qqnorm(x, axes=FALSE, xlab="", ylab="", main="")
qqline(x, col="blue", lwd=2)
box()
Mi piace molto questa opzione per la sua semplicità e capacità di usare le funzioni di tracciamento di base. Essendo un utente di "griglia", non ne ho l'uso da solo, ma dovrò ricordarlo per gli altri che chiedono. Grazie per averlo indicato. – Dinre
La funzione subplot
nel pacchetto TeachingDemos fa esattamente questo per la grafica di base.
Creare il grafico a dimensione intera, quindi chiamare subplot
con il comando di stampa che si desidera nella sottotrama e specificare la posizione della sottotrama. La posizione può essere specificata da parole chiave come "topleft" o puoi dargli le coordinate nel sistema di coordinate utente corrente dei grafici.
- 1. grafico interattivo matplotlib (disegno manuale di linee su un grafico)
- 2. Libreria di disegno grafico C++
- 3. copia un grafico (adjacency_list) in un altro
- 4. Winforms/GDI + Curva di disegno per un grafico
- 5. Come modificare gli attributi di un disegno grafico networkx/matplotlib?
- 6. Python ASCII Grafico Disegno
- 7. graphviz disegno grafico verticale
- 8. Grafico di disegno e tracciatura in OpenCV
- 9. Disegno di un triangolo
- 10. Un modo semplice per determinare se un dato grafico è sottografo di qualche altro grafico?
- 11. Disegna un grafico di larghezza del tratto di 1 pixel in un disegno svg in A4
- 12. Inserimento di un disegno AutoCAD preesistente in un disegno corrente
- 13. Disegno grafico con bordi ponderati
- 14. Disegno grafico Haskell su Windows
- 15. Disegno di un pulsante trasparente
- 16. Disegno di un rettangolo ruotato
- 17. Disegno all'esterno di un UIView
- 18. Disegno di un SimpleWeightedGraph su un JPanel
- 19. Disegno di un singolo grafico a linee di Google con più linee utilizzando JSON
- 20. Come animare il disegno di un CGPath?
- 21. ChartJS - Disegno grafico con etichetta per mese, dati di giorno
- 22. Disegno di un layout quadrato all'interno di un cerchio
- 23. Disegno brutto del grafico radar MS asp.net
- 24. Disegno di un grafico per rappresentare la separazione successiva in categorie (R, ggplot2)
- 25. Algoritmo di disegno del grafico a forza diretta a un passaggio
- 26. Un disegno di funtori in OCaml
- 27. Swift 3: disegno di un rettangolo
- 28. Disegno di un rettangolo in UIView
- 29. Un disegno di moduli e interfaccia
- 30. Creazione di un grafico ternario
Con ggplot2, vedere l'ultimo esempio in '? Annotation_custom' – baptiste