I am doing this graph with this code
ggplot(c_clinicos) +
aes(x = Condición, fill = Estado, weight = Conteo) +
geom_bar() +
scale_fill_manual(values = list(
Ausente = "#FF1100", Presente = "#538FF6")) +
labs(x = "Condición clínica", y = "Nº Personas. ",
title = "Distribución de la presencia por enfermedad", subtitle = "Muestra de 810 pacientes", fill = "Estado:") +
coord_flip() +
theme_linedraw()
I want to get a little square for each bar (blue and red) that tells me how many people there is and a %. I have been trying to use geom_label but I couldn't make that work.
I am using this data:
structure(list(Condición = c("Cianosis Aguda", "Cianosis Aguda",
"Gassping", "Gassping", "FR mayor de 40 o menor de 6 rpm", "FR mayor de 40 o menor de 6 rpm",
"Oliguria que no responde a volumen y uso de diuréticos", "Oliguria que no responde a volumen y uso de diuréticos",
"Transtornos de la coagulación", "Transtornos de la coagulación",
"Pérdida de la conciencia mayor de 12 horas", "Pérdida de la conciencia mayor de 12 horas",
"Pérdida de la conciencia y ausencia de pulso y latidos cardíacos.",
"Pérdida de la conciencia y ausencia de pulso y latidos cardíacos.",
"Stroke", "Stroke", "Parálisis total o convulsiones incontrolables",
"Parálisis total o convulsiones incontrolables", "Ictericia más preeclampsia",
"Ictericia más preeclampsia"), Estado = c("Presente", "Ausente",
"Presente", "Ausente", "Presente", "Ausente", "Presente", "Ausente",
"Presente", "Ausente", "Presente", "Ausente", "Presente", "Ausente",
"Presente", "Ausente", "Presente", "Ausente", "Presente", "Ausente"
), Conteo = c(13, 797, 0, 810, 520, 290, 314, 496, 150, 659,
1, 809, 1, 809, 9, 801, 49, 761, 114, 696)), row.names = c(NA,
-20L), class = c("tbl_df", "tbl", "data.frame"))
Thanks in Advance.
We can calculate the labels that we want to display and use it in geom_label.
library(dplyr)
library(ggplot2)
c_clinicos %>%
group_by(Condición) %>%
mutate(label = sprintf('%d \n(%.2f %%)', Conteo, prop.table(Conteo) * 100),
label = replace(label, Conteo == 0, '')) %>%
ggplot() +
aes(x = Condición, fill = Estado, y = Conteo, label = label) +
geom_col() +
scale_fill_manual(values = list(
Ausente = "#FF1100", Presente = "#538FF6")) +
labs(x = "Condición clínica", y = "Nº Personas. ",
title = "Distribución de la presencia por enfermedad",
subtitle = "Muestra de 810 pacientes", fill = "Estado:") +
geom_label(position=position_stack(vjust=0.5), color = 'white') +
coord_flip() +
theme_linedraw()
Related
I have a dataframe with columns A and B listing coordinates, but they are in DMS format. I wonder if there is a simple way to convert them into Latitudes and Longitudes format with a R package.
Here is a sample of my database:
structure(list(Nom = c("Pont de Normandie", "Pont de Tancarville",
"Pont de Saint-Nazaire", "Pont de l’Iroise", "Pont d'Aquitaine",
"Viaduc de Millau", "Pont de Brotonne", "Viaduc du Chavanon",
"Pont de Térénez", "Pont du Bras de la Plaine"), Portée = c("856",
"608", "404", "400", "394", "342 (×6)", "320", "300", "285",
"281"), Long. = c(2141, 1420, 3356, 800, 1767, 2460, 1278, 360,
515, 305), Type = c("Haubané\nacier, béton précontraint",
"Suspendu\nacier, béton précontraint, béton armé", "Haubané\nacier, béton précontraint",
"Haubané\nacier, béton précontraint", "Suspendu\nacier, béton précontraint, pylônes en béton armé",
"Haubané\nMultihaubané, 7 piles béton, tablier et pylônes caissons acier, suspension axiale",
"Haubané\nTablier caisson béton, pylônes béton, suspension axiale",
"Suspendu\nTablier caisson mixte acier/béton, pylônes béton, suspension axiale",
"Haubané\nTablier courbe dalle béton, pylônes béton", "Treillis mixte acier/béton, précontrainte extérieure"
), `Voie portée
Voie franchie` = c("Autoroute A29\nRoute européenne 44\nSeine",
"Autoroute A131\nRoute européenne 5\nN182\nSeine", "RD 213\nLoire",
"RN 165\nRoute européenne 60\nÉlorn", "Autoroute A630\nRoute européenne 5\nRocade de Bordeaux\nGaronne",
"Autoroute A75\nRoute européenne 11\nGorges du Tarn", "RD 490\nSeine",
"Autoroute A89\nRoute européenne 70\nChavanon", "RD 791\nAulne",
"RD 26\nBras de la Plaine"), Date = c("1995", "1959", "1975",
"1994", "1967", "2004", "1977", "2000", "2011", "2001"), Localisation = c("Le Havre - Honfleur\n",
"Tancarville - Marais-Vernier\n", "Saint-Nazaire - Saint-Brevin-les-Pins\n",
"Plougastel-Daoulas - Le Relecq-Kerhuon\n", "Bordeaux\n", "Millau - Creissels\n",
"Caudebec-en-Caux\n", "Merlines - Messeix\n", "Landévennec - Rosnoën\n",
"Saint-Pierre - Entre-Deux\n"), A = c("49° 25′ 56,1″ N",
"49° 28′ 21,6″ N", "47° 17′ 06,3″ N", "48° 23′ 18,1″ N",
"44° 52′ 47,2″ N", "44° 04′ 48″ N", "49° 31′ 13,9″ N",
"45° 37′ 26,5″ N", "48° 16′ 07,9″ N", "21° 16′ 35,5″ S"
), B = c("0° 16′ 26,3″ E", "0° 27′ 52,8″ E",
"2° 10′ 13,8″ O", "4° 23′ 55,6″ O", "0° 32′ 09,7″ O",
"3° 01′ 20,6″ E", "0° 44′ 49,8″ E", "2° 28′ 47,5″ E",
"4° 15′ 48,2″ O", "55° 27′ 56,7″ E"), Département = c("Seine-Maritime\nCalvados",
"Seine-Maritime\nEure", "Loire-Atlantique", "Finistère", "Gironde",
"Aveyron", "Seine-Maritime", "Corrèze\nPuy-de-Dôme", "Finistère",
"La Réunion")), row.names = c(NA, -10L), class = c("tbl_df",
"tbl", "data.frame"))
You don't really need a package for this. A simple function should do the trick:
dms_to_degrees <- function(dms) {
sapply(strsplit(dms, "(° )|(' )|(″ )"), function(x) {
sum(as.numeric(gsub(",", ".", x)[1:3]) * c(1, 1/60, 1/3600)) *
c(1, -1, 1, -1)[match(x[4], c("N", "S", "E", "O"))]
})
}
Which allows:
dms_to_degrees(df$A)
#> [1] 49.43225 49.47267 47.28508 48.38836 44.87978 44.08000
#> [7] 49.52053 45.62403 48.26886 -21.27653
dms_to_degrees(df$B)
#> [1] 0.2739722 0.4646667 -2.1705000 -4.3987778 -0.5360278 3.0223889
#> [7] 0.7471667 2.4798611 -4.2633889 55.4657500
And we can confirm this by drawing a map:
library(ggplot2)
ggplot(data = map_data("world")) +
geom_map(map = map_data("world"), aes(long, lat, map_id = region),
fill = "#d0e890", color = "gray50") +
geom_point(data = within(df, {lat <- dms_to_degrees(A);
long <- dms_to_degrees(B)}),
aes(x = long, y = lat), color = 'red')
and thanks for reading me again
I am working with a table in which in the "Valor" column I have a vector with numbers from 0 to 1 for bars with percentages as seen in the following image:
But I would like that in the fields where there is a value of "0%" instead of having the progress bar it would simply have the text "nd". Is there a way to do that?
The code used is the following:
library(dplyr)
library(reactable)
library(htmltools)
# df for the table
Objetivo_1 <- data.frame(
Estrategia = c("1.1", "1.2", "1.3", "1.4", "1.5", "1.6"),
`Nombre del indicador` = c("Porcentaje de indicadores de la estrategia 1.1
que cumplen con la tendencia esperada entre el periodo
actual y el periodo inmediato anterior",
"Porcentaje de indicadores de la estrategia 1.2
que cumplen con la tendencia esperada entre el periodo
actual y el periodo inmediato anterior",
"Porcentaje de indicadores de la estrategia 1.3
que cumplen con la tendencia esperada entre el periodo
actual y el periodo inmediato anterior",
"Porcentaje de indicadores de la estrategia 1.4
que cumplen con la tendencia esperada entre el periodo
actual y el periodo inmediato anterior",
"Porcentaje de indicadores de la estrategia 1.5
que cumplen con la tendencia esperada entre el periodo
actual y el periodo inmediato anterior",
"Porcentaje de indicadores de la estrategia 1.6
que cumplen con la tendencia esperada entre el periodo
actual y el periodo inmediato anterior"
),
Valor = round(c(0.111,0.4111,0.25,0,0.2,432), digits = 2),
`Método de cálculo` = c("Número de indicadores que cumplen/Total de indicadores de la estrategia 1.1",
"Número de indicadores que cumplen/Total de indicadores de la estrategia 1.2",
"Número de indicadores que cumplen/Total de indicadores de la estrategia 1.3",
"Número de indicadores que cumplen/Total de indicadores de la estrategia 1.4",
"Número de indicadores que cumplen/Total de indicadores de la estrategia 1.5",
"Número de indicadores que cumplen/Total de indicadores de la estrategia 1.6"))
# Function for barchart
bar_chart <- function(label, width = "100%", height = "14px", fill = "#00bfc4", background = NULL) {
bar <- div(style = list(background = fill, width = width, height = height))
chart <- div(style = list(flexGrow = 1, marginLeft = "6px", background = background), bar)
div(style = list(display = "flex", alignItems = "center"), label, chart)
}
###table
reactable(
Objetivo_1,
bordered = TRUE,
searchable = TRUE,
language = reactableLang(
searchPlaceholder = "Busqueda",
noData = "Sin coincidencias",
pageInfo = "{rowStart} a {rowEnd} de {rows} entries",
pagePrevious = "\u276e",
pageNext = "\u276f",
# Accessible labels for assistive technologies such as screen readers.
# These are already set by default, but don't forget to update them when
# changing visible text.
pagePreviousLabel = "Página anterior",
pageNextLabel = "Siguiente página"
),
defaultSorted = "Valor",
columns = list(
Nombre.del.indicador = colDef(
name = "Nombre del indicador"
),
Método.de.cálculo = colDef(
name = "Método de cálculo"
),
Valor = colDef(
name = " Valor",
defaultSortOrder = "desc",
# Render the bar charts using a custom cell render function
cell = function(value) {
# Format as percentages with 1 decimal place
value <- paste0(format(value * 100, nsmall = 1), "%")
bar_chart(value, width = value, fill = "#822b2b", background = "#e1e1e1")
},
# And left-align the columns
align = "left"
)
)
)
By changing bar_chart slightly,
bar_chart <- function(label, width = "100%", height = "14px", fill = "#00bfc4", background = NULL) {
if (label == "0.0%"){
div('nd')
} else{
bar <- div(style = list(background = fill, width = width, height = height))
chart <- div(style = list(flexGrow = 1, marginLeft = "6px", background = background), bar)
div(style = list(display = "flex", alignItems = "center"), label, chart)
}
}
You may get nd instead of bar
Recently I'm using the survival package in R, in order to be able to better measure the waiting time of patients in the Emergency Department of my Hospital, what I have achieved. However, it's complex to show the results and that can be understood by third parties from RStudio, so I'm developing a Shiny App to show the results without having to show the code and be able to modify certain elements quickly
When I create the app, I have the problem that when I request that you build a dataframe with the quantiles, I get the error: "Error in rep: invalid 'times' argument" in R#200. I have reviewed the code on multiple occasions, but I still can't find a solution. I enclose the complete code
Thank you
ui <- fluidPage(
titlePanel("Prototipo Tiempos de Urgencia"),
sidebarLayout(
sidebarPanel(
selectInput(inputId = "triage",
label = "Triage",
choices =c("Todos",listadotriage),
selectize = FALSE,
selected = "Todos"),
selectInput(inputId = "tiempo",
label = "Tiempo a analizar",
choices = c("Diferencia entre Hora de atención y hora de triage" = "60",
"Diferencia ente hora de atencón y hora de admisión" = "61",
"Diferencia ente hora de atencón y hora de alta" = "62",
"Diferencia ente hora de admision y hora de alta" = "63",
"Diferencia ente hora de admision y hora de triage" = "64"),
selectize = FALSE,
selected = "Diferencia entre Hora de atención y hora de triage"),
selectInput(inputId = "atencion",
label = "Área Atención",
choices = c("Todos",listadoatencion),
selectize = FALSE,
selected = "Todos"),
selectInput(inputId = "alta",
label = "Tipo de Alta",
choices = c("General" = "74",
"Hospitalizado" = "72",
"Altas" = "73"),
multiple = FALSE,
selected = "General"),
dateRangeInput(inputId = "fecha",
label = "Intervalo de fechas",
format = "dd-mm-yyyy",
start = "2019-11-01",
end = "2019-11-30",
weekstart = 1,
language= "es",
separator = "a")
),
mainPanel = dataTableOutput(outputId = "tabla1")
))
server <- function(input, output) {
output$tabla1 <- renderDataTable({
if (input$triage=="Todos") {
dat1<-subset(dat1,ifelse(input$atencion!="Todos",dat1$AREA_ATENCION==input$atencion & dat1$fechanormal>=input$fecha[1] & dat1$fechanormal<=input$fecha[2],
dat1$fechanormal>=input$fecha[1] & dat1$fechanormal<=input$fecha[2]))
timesevent<-as.integer(input$tiempo)
event<-as.integer(input$alta)
dat3<-dat1[,c(30,timesevent,event)]
gral<-Surv(dat3[[2]] ,event= as.numeric(dat3[[3]]))
fit1a<-survfit(gral ~ Medico, data = dat3)
d1<-as.data.frame(quantile(fit1a,c(0.25,0.5,0.75,0.9,1),conf.int = FALSE)) # estadísticas sobre tiempo de demora según modelo
data1<-as.data.frame(fit1a$strata)
setDT(data1,keep.rownames = TRUE)
data1$rn<-gsub("Medico=","",data1$rn)
colnames(data1)<-c("Médico","Consultas")
setDT(d1,keep.rownames = TRUE)[]
d1$rn<-gsub("Medico=","",d1$rn)
colnames(d1)<-c("Médico","P.25","P.50","P.75","P.90","P.100")
datatotal1<-merge(data1,d1,by="Médico")
datatable(data=datatota1l,caption =paste("Tiempos de atención en Servicio de Urgencia por Médico, por Atención en Servicio",input$atencion,"durante","el período",format(input$fecha[1], format= "%d-%m-%Y"),"a",format(input$fecha[2], format= "%d-%m-%Y"), sep=" "),
rownames = FALSE,extensions= "Buttons",options=list(pageLength=40,dom="Bfrtip", buttons = c("print")) )
} else {
dat1<-subset(dat1,dat1$Triage==input$triage)
dat1<-subset(dat1,ifelse(input$atencion!="Todos",dat1$AREA_ATENCION==input$atencion & dat1$fechanormal>=input$fecha[1] & dat1$fechanormal<=input$fecha[2],
dat1$fechanormal>=input$fecha[1] & dat1$fechanormal<=input$fecha[2]))
timesevent<-as.integer(input$tiempo)
event<-as.integer(input$alta)
dat3<-dat1[,c(30,timesevent,event)]
gral<-Surv(dat3[[2]] ,event= as.numeric(dat3[[3]])) ~ Medico
fit1b<-survfit(gral ~ Medico, data = dat3)
d2<-as.data.frame(quantile(fit1b,c(0.25,0.5,0.75,0.9,1),conf.int = FALSE)) # estadísticas sobre tiempo de demora según modelo
data2<-as.data.frame(fit1b$strata)
setDT(data2,keep.rownames = TRUE)
data2$rn<-gsub("Medico=","",data2$rn)
colnames(data2)<-c("Médico","Consultas")
setDT(d2,keep.rownames = TRUE)[]
d2$rn<-gsub("Medico=","",d2$rn)
colnames(d2)<-c("Médico","P.25","P.50","P.75","P.90","P.100")
datatotal2<-merge(data2,d1,by="Médico")
datatable(data=datatotal2,caption =paste("Tiempos de atención en Servicio de Urgencia por Médico, por Categorización",input$triage,"por Atención en Servicio",input$atencion,"durante","el período",format(input$fecha[1], format= "%d-%m-%Y"),"a",format(input$fecha[2], format= "%d-%m-%Y"), sep=" "),
rownames = FALSE,extensions= "Buttons",options=list(pageLength=40,dom="Bfrtip", buttons = c("print")) )
}
})
}
shinyApp(ui = ui, server = server)```
I resolved!!!!
I changed the next lines
dat1<-subset(dat1,ifelse(input$atencion!="Todos",dat1$AREA_ATENCION==input$atencion & dat1$fechanormal>=input$fecha[1] & dat1$fechanormal<=input$fecha[2],
dat1$fechanormal>=input$fecha[1] & dat1$fechanormal<=input$fecha[2]))
```
for the next lines:
```
dat3<-subset(dat3,dat3$fechanormal>=input$fecha[1] & dat3$fechanormal<=input$fecha[2])
ifelse(input$atencion!="Todos",dat3<-subset(dat3,dat3$AREA_ATENCION==input$atencion),NA)
```
Regards!!!
I need to put the min date value and the max date value in ggplot subtitle.
I've found a similar question but for the axis labels, I need to apply this to the subtitle argument:
subtitle = paste0("Del ", vitocho_likes_min_date, " al ", vitocho_likes_max_date)
Min date looks like:
"2010-10-14" #Expect: "14 de octubre del 2010"
dput(vitocho_likes_min_date)
structure(14896, class = "Date")
Max date looks like:
"2019-04-29" #Expect: "29 de abril del 2019"
dput(vitocho_likes_max_date)
structure(18015, class = "Date")
This is my ggplot chart:
vitocho_chart <- t_kids_faves %>%
filter(user == "VictorAndresGB") %>%
ggplot(aes(x = fct_reorder(screen_name, n), y = n)) +
geom_col(fill = "#494A4F") +
coord_flip() +
theme_tweets() +
labs(
x = "",
y = "",
title = "Cuentas de Twitter con más likes de Victor Andrés García Belaunde.",
subtitle = paste0("Del ", vitocho_likes_min_date, " al ", vitocho_likes_max_date)
) +
geom_text(
aes(x = screen_name,
y = n - 15,
label = n
),
size = 4,
color = "gray95"
)
use:
Sys.setlocale("LC_TIME", "Spanish")
vitocho_likes_min_date= as.character(format(as.Date(14896, origin="1970-01-01"), "%d de %B del %Y"))
vitocho_likes_max_date= as.character(format(as.Date(18015, origin="1970-01-01"), "%d de %B del %Y"))
I built a graph and used the coord_polar function. However, the x labels are too long, so I used the str_wrap() function from the stringr library to wrap them. Unfortunately when they are plotted, the text in every label is centered.
I want the text IN the labels to be aligned to the left, normally this is done with the hjust function in theme(), but when using coord_polar() it does not work. What am I doing wrong?
Data:
preguntas = c("Mi superior restringe mis posibihdlidades de comunicarme,hablar o reunirme con él",
"Me ignoran, me excluyen o me hfacen el vacio, fingen no verme o me hacfen invisible",
"Me interrumpen continuamente impidiendo expfresarme","Me fuerzan a realifzar trabajos que van contra mis principios o mi ética",
"Evalúan mi trabajo de manera inequitativfa o de forma sesgada","Me dejan sifn ningún trabajo que hacer, ni siquiera a iniciativa propia",
"Me asignan tareas o trabajos absurdos o sin sentido","Me impiden que adopte flas medidas de seguridad necesarias para realizar mi trabajo con la debida seguridad",
"Mi superior restringe mis posibilidades de comunicarme, hablar o reunirme conf él",
"Me ignoran, me excluyen o me hacen el vacio, fingen no verme o me hacen invisifble",
"Me interrumpen continuamente impidiendo expresarme","Me fuerzan a realizar trabfajos que van contra mis principios o mi ética",
"Evalúan mi trabajo de manera idnequitativa o de forma sesgada","Me dejan sin ningfún trabajo que hacer, ni siquiera a iniciativa propia",
"Me asignan tareas o trabajos absurdos o sin sefntido","Me impiden que adopte las mfedidas de seguridad necesarias para realizar mi trabajo con la debida seguridad",
"Mi superior restringe mis posibilidades de comufnicarme", "hablar o reunirme con éfl",
"Me ignoran, me excluyen o me hacen el vacio, fingen no verme o me hacen invisiblfe",
"Me interrumpen continuamente impidiendo expresarmfe","Me fuerzan a realizar trabajfos que van contra mis principios o mi ética",
"Evalúan mi trabajo de manera inequitativa o de fforma sesgada","Me dejan sin ningúnf trabajo que hacer, ni siquiera a iniciativa propia",
"Me asignan tareas o trabajos absurdos o sin senftido","Me impiden que adopte las medfidas de seguridad necesarias para realizar mi trabajo con la debida seguridad",
"Mi superior restringe mis posibilidades de comfunicarme, hablar o reunifrme con él",
"Me ignoran, me exclujyen o me hacen el vacio, ffingen no verme o me hacenf invisible",
"Me interrumpen continuamente impidiendo exprfesarme","Me fuerzan a realizfar trabajos que van contra mis principios o mi ética",
"Evalúan mi trabajo de manera inequitativa of de forma sesgada","Me dejan sfin ningún trabajo que hacer, ni siquiera a iniciativa propia",
"Me asignan tareas o trabajos absurdos o sifn sentido","Me impiden que adoptfe las medidas de seguridad necesarias para realizar mi trabajo con la debida seguridad",
"Mi superior restringe mis posibilidades dfe comunicarme, hablar o reunirme cfon él",
"Me ignoran, me excluyen o me hacen el vafcio, fingen no verme o me hacen invifsible",
"Me interrumpen continuamente impidiendof expresarme","Me fuerzan a realizar trfabajos que van contra mis principios o mi ética",
"Evalúan mi trabajo de manera inequitatfiva o de forma sesgada","Me dejan sin nifngún trabajo que hacer, ni siquiera a iniciativa propia",
"Me asignan tareas o trabajos absurdosf o sin sentido","Me impiden que adopte lasf medidas de seguridad necesarias para realizar mi trabajo con la debida seguridad",
"Evalúan mi trabajo de magnera inequitatfiva o de forma sesgada","Me dejan siin nifngún trabajo que hacer, ni siquiera a iniciativa propia")
valores = floor(runif(43, min=1, max=6))
dataset = data.frame(preguntas, valores)
Code:
library(ggplot2)
library(stringr)
dataset$preguntasCortas = str_wrap(dataset$preguntas, width = 8)
ggplot (data = dataset,
aes(x = preguntasCortas, y = valores, fill = valores)
) +
geom_bar(width = .4, stat = "identity", na.rm = TRUE)+
scale_fill_gradient(low = "gray", high = "red", limits = c(1, 6)) +
coord_polar() +
scale_y_discrete(limits = c(0,7)) +
theme(
axis.text.y = element_blank(),
axis.text.x = element_text(angle = 45, vjust = 0,hjust = 0),
legend.title = element_blank(),
legend.text = element_text(size = 10),
axis.title = element_blank(),
axis.ticks = element_blank(),
panel.background = element_rect(fill = "transparent", color = NA),
plot.margin = unit(c(-.1, -.1, -.1, -.1), "cm"),
text = element_text(
family = "Century Gothic", size=5, color = "#595959"
)
)
In polar coordinates, the hjust / vjust parameter values are hard-coded to 0.5 in CoordPolar$render_fg (See source code here).
You can get around it by defining your own version of CoordPolar that codes hjust differently in render_fg, & define a coord_polar2() function that calls on that instead of the original CoordPolar:
CoordPolar2 <- ggproto("CoordPolar2",
CoordPolar,
render_fg = function (self, panel_params, theme) {
if (is.null(panel_params$theta.major)) {
return(element_render(theme, "panel.border"))
}
theta <- ggplot2:::theta_rescale(self, panel_params$theta.major, panel_params)
labels <- panel_params$theta.labels
theta <- theta[!is.na(theta)]
ends_apart <- (theta[length(theta)] - theta[1])%%(2 * pi)
if (length(theta) > 0 && ends_apart < 0.05) {
n <- length(labels)
if (is.expression(labels)) {
combined <- substitute(paste(a, "/", b), list(a = labels[[1]],
b = labels[[n]]))
}
else {
combined <- paste(labels[1], labels[n], sep = "/")
}
labels[[n]] <- combined
labels <- labels[-1]
theta <- theta[-1]
}
grid::grobTree(if (length(labels) > 0)
ggplot2:::element_render(theme,
"axis.text.x",
labels,
unit(0.45 * sin(theta) + 0.5, "native"),
unit(0.45 * cos(theta) + 0.5, "native"),
hjust = 0, # hjust = 0.5,
vjust = 0.5),
ggplot2:::element_render(theme, "panel.border"))
})
coord_polar2 <- function (theta = "x", start = 0, direction = 1, clip = "on") {
theta <- match.arg(theta, c("x", "y"))
r <- if (theta == "x")
"y"
else "x"
ggproto(NULL,
CoordPolar2, #CoordPolar,
theta = theta, r = r, start = start,
direction = sign(direction), clip = clip)
}
Usage example (I simplified the code & took only the first few rows of data for illustration):
p <- ggplot(data = dataset[1:8, ], # first 8 rows
aes(x = preguntasCortas, y = valores, fill = valores)) +
geom_col(width = .4, na.rm = TRUE)+
scale_fill_gradient(low = "gray", high = "red", limits = c(1, 6)) +
scale_y_discrete(limits = c(0,7)) +
theme_void() +
theme(axis.text.x = element_text(size = 5, lineheight = 0.9, angle = 45))
cowplot::plot_grid(
p + coord_polar(),
p + coord_polar2(),
nrow = 1,
labels = c("Original", "New")
)