Reputation: 1503
I have a radar chart in r that shows percentages by month. I would like to
The bad chart is below
The good chart I would like to replicate is below
The code for the radar chart is below
library(reshape2)
library(ggplot2)
library(dplyr)
Group <- factor(c("Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"),
levels = c("Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"))
Urban <- c(-0.61, 0.13, 0.24, -0.30, -0.12, -1.24, 0.74, 0.55, 0.80, .2, .2, .2)
Rural <- c(1.02, -0.40, 0.73, 0.17, 0.68, 1.21, -1.35, -0.84, -1.27, .2, .2, .2)
Total <- c(0.41, -0.27, 0.97, -0.13, 0.56, -0.03, -0.61, -0.29, -0.47, 0.4, 0.4, 0.4)
# data preparation
df = data.frame(Group = Group,
Urban = Urban,
Rural = Rural,
Total = Total)
df.m <- melt(df,
id.vars = c("Group"),
measure.vars = c("Urban", "Rural","Total"),
variable.name = "Demographics",
value.name = "Percentage")
# plot
ggplot(data = df.m,
aes(x = Group, y = Percentage, group = Demographics, colour = Demographics)) +
geom_polygon(size = 1, alpha= 0.2) +
ylim(-2.0, 2.0) + ggtitle("Radar") +
scale_x_discrete() +
theme_light() +
scale_color_manual(values = c("Red", "Blue","Black")) +
scale_fill_manual(values = c("Red", "Blue","Black")) +
coord_polar()
Upvotes: 1
Views: 3359
Reputation: 66765
I don't know a way with normal scale_y_continuous terms to get the y-axis scale to appear in the plot rather than on its edges, but it can be faked using annotate
to create an ad hoc layer. We can also rotate the polar transformation with the start
term in coord_polar
.
ggplot(data=df.m, aes(x=Group, y=Percentage, group= Demographics, colour=Demographics )) +
annotate("text", x = 1, y = -2:2, label = -2:2, hjust = 1) +
geom_polygon(size = 1, alpha= 0.2) +
ggtitle("Radar") +
scale_y_continuous(labels = NULL) +
scale_x_discrete() +
scale_color_manual(values= c("Red", "Blue","Black"))+
scale_fill_manual(values= c("Red", "Blue","Black"))+
theme_light()+
coord_polar(start = -pi/12)
Upvotes: 2