I try to run this option of a plot:
library(ggalluvial)
library(ggplot2)
library(dplyr)
df <- data.frame(status = c("open", "close", "close", "open/close", "close"),
stock = c("google", "amazon", "amazon", "yahoo", "amazon"),
newspaper = c("times", "newyork", "london", "times", "times"))
# Count the number of occurance for each alluvial
df <- df %>% dplyr::group_by(stock, newspaper, status) %>%
summarise(n = n())
# Define the factors
df$status <- factor(df$status, levels = c("open", "open/close", "close"))
df$stock <- factor(df$stock, levels = c("google", "amazon", "yahoo"))
df$newspaper <- factor(df$newspaper, levels = c("times", "newyork", "london"))
# Plot the alluvial as in https://cran.r-project.org/web/packages/ggalluvial/vignettes/ggalluvial.html#alluvia-wide-format
ggplot2::ggplot(df.2, aes(y = n, axis1 = stock, axis2 = newspaper))
ggalluvial::geom_alluvium(aes(fill = status), width = 1/12)
ggalluvial::geom_stratum(width = 1/12, fill = "black", color = "grey")
ggplot2::geom_label(stat = "stratum", aes(label = after_stat(stratum)))
ggplot2::scale_x_discrete(limits = c("stock", "newspaper"), expand = c(.05, .05))
ggplot2::scale_fill_brewer(type = "qual", palette = "Set1")
ggplot2::ggtitle("Alluvial-Test")
Is there any command which can reduce the labels of this two columns stock and newspaper?
CodePudding user response:
You could change the size
in geom_label
like this:
library(ggalluvial)
library(ggplot2)
library(dplyr)
df <- data.frame(status = c("open", "close", "close", "open/close", "close"),
stock = c("google", "amazon", "amazon", "yahoo", "amazon"),
newspaper = c("times", "newyork", "london", "times", "times"))
# Count the number of occurance for each alluvial
df <- df %>% dplyr::group_by(stock, newspaper, status) %>%
summarise(n = n())
#> `summarise()` has grouped output by 'stock', 'newspaper'. You can override
#> using the `.groups` argument.
# Define the factors
df$status <- factor(df$status, levels = c("open", "open/close", "close"))
df$stock <- factor(df$stock, levels = c("google", "amazon", "yahoo"))
df$newspaper <- factor(df$newspaper, levels = c("times", "newyork", "london"))
# Plot the alluvial as in https://cran.r-project.org/web/packages/ggalluvial/vignettes/ggalluvial.html#alluvia-wide-format
ggplot2::ggplot(df, aes(y = n, axis1 = stock, axis2 = newspaper))
ggalluvial::geom_alluvium(aes(fill = status), width = 1/12)
ggalluvial::geom_stratum(width = 1/12, fill = "black", color = "grey")
ggplot2::geom_label(stat = "stratum", aes(label = after_stat(stratum)), size = 2)
ggplot2::scale_x_discrete(limits = c("stock", "newspaper"), expand = c(.05, .05))
ggplot2::scale_fill_brewer(type = "qual", palette = "Set1")
ggplot2::ggtitle("Alluvial-Test")
#> Warning: Using the `size` aesthetic in this geom was deprecated in ggplot2 3.4.0.
#> ℹ Please use `linewidth` in the `default_aes` field and elsewhere instead.
CodePudding user response:
I think a nicer result would be obtained from geom_text
at 90 degrees rotation:
ggplot(df, aes(y = n, axis1 = stock, axis2 = newspaper))
geom_alluvium(aes(fill = status), width = 1/12, color = "white", size = 2)
geom_stratum(width = 1/12, fill = "gray30", color = "white", size = 2)
geom_text(stat = "stratum", aes(label = after_stat(stratum), angle = 90),
color = "white", size = 8)
scale_x_discrete(limits = c("stock", "newspaper"), expand = c(.05, .05))
scale_fill_brewer(type = "qual", palette = "Set1")
ggtitle("Alluvial-Test")
theme_void(base_size = 20)
theme(plot.margin = margin(20, 20, 20, 20))