# R/01-static-visualizations.R#' Create comprehensive static visualizations#'#' @param data Data frame#' @param visualization_type Type of visualization#' @param parameters Visualization parameters#' @return Static visualizationcreate_static_visualization<-function(data,visualization_type,parameters=list()){switch(visualization_type,"scatter_plot"=create_scatter_plot(data,parameters),"line_plot"=create_line_plot(data,parameters),"bar_plot"=create_bar_plot(data,parameters),"histogram"=create_histogram(data,parameters),"box_plot"=create_box_plot(data,parameters),"heatmap"=create_heatmap(data,parameters),stop("Unsupported visualization type: ",visualization_type))}#' Create scatter plot#'#' @param data Data frame#' @param parameters Plot parameters#' @return Scatter plotcreate_scatter_plot<-function(data,parameters){library(ggplot2)p<-ggplot(data,aes_string(x=parameters$x,y=parameters$y))+geom_point(alpha=parameters$alpha%||%0.7,size=parameters$size%||%2,color=parameters$color%||%"steelblue")+theme_minimal()+labs(title=parameters$title%||%"Scatter Plot",x=parameters$x_label%||%parameters$x,y=parameters$y_label%||%parameters$y)# Add trend line if requestedif(parameters$add_trend_line){p<-p+geom_smooth(method="lm",se=parameters$show_confidence_interval)}# Add color mapping if specifiedif(!is.null(parameters$color_by)){p<-p+aes_string(color=parameters$color_by)+scale_color_viridis_d()}return(p)}#' Create line plot#'#' @param data Data frame#' @param parameters Plot parameters#' @return Line plotcreate_line_plot<-function(data,parameters){library(ggplot2)p<-ggplot(data,aes_string(x=parameters$x,y=parameters$y))+geom_line(size=parameters$size%||%1,color=parameters$color%||%"steelblue")+theme_minimal()+labs(title=parameters$title%||%"Line Plot",x=parameters$x_label%||%parameters$x,y=parameters$y_label%||%parameters$y)# Add points if requestedif(parameters$add_points){p<-p+geom_point(size=parameters$point_size%||%2)}# Add multiple lines if specifiedif(!is.null(parameters$group_by)){p<-p+aes_string(group=parameters$group_by,color=parameters$group_by)+scale_color_viridis_d()}return(p)}#' Create bar plot#'#' @param data Data frame#' @param parameters Plot parameters#' @return Bar plotcreate_bar_plot<-function(data,parameters){library(ggplot2)p<-ggplot(data,aes_string(x=parameters$x,y=parameters$y))+geom_bar(stat="identity",fill=parameters$fill%||%"steelblue",alpha=parameters$alpha%||%0.7)+theme_minimal()+labs(title=parameters$title%||%"Bar Plot",x=parameters$x_label%||%parameters$x,y=parameters$y_label%||%parameters$y)# Add color mapping if specifiedif(!is.null(parameters$color_by)){p<-p+aes_string(fill=parameters$color_by)+scale_fill_viridis_d()}# Rotate x-axis labels if neededif(parameters$rotate_x_labels){p<-p+theme(axis.text.x=element_text(angle=45,hjust=1))}return(p)}#' Create histogram#'#' @param data Data frame#' @param parameters Plot parameters#' @return Histogramcreate_histogram<-function(data,parameters){library(ggplot2)p<-ggplot(data,aes_string(x=parameters$x))+geom_histogram(bins=parameters$bins%||%30,fill=parameters$fill%||%"steelblue",alpha=parameters$alpha%||%0.7,color=parameters$color%||%"white")+theme_minimal()+labs(title=parameters$title%||%"Histogram",x=parameters$x_label%||%parameters$x,y="Frequency")# Add density curve if requestedif(parameters$add_density){p<-p+geom_density(alpha=0.5,color="red")}# Add normal curve if requestedif(parameters$add_normal_curve){p<-p+stat_function(fun=dnorm,args=list(mean=mean(data[[parameters$x]],na.rm=TRUE),sd=sd(data[[parameters$x]],na.rm=TRUE)),color="red",size=1)}return(p)}#' Create box plot#'#' @param data Data frame#' @param parameters Plot parameters#' @return Box plotcreate_box_plot<-function(data,parameters){library(ggplot2)p<-ggplot(data,aes_string(x=parameters$x,y=parameters$y))+geom_boxplot(fill=parameters$fill%||%"steelblue",alpha=parameters$alpha%||%0.7)+theme_minimal()+labs(title=parameters$title%||%"Box Plot",x=parameters$x_label%||%parameters$x,y=parameters$y_label%||%parameters$y)# Add jitter if requestedif(parameters$add_jitter){p<-p+geom_jitter(alpha=0.3,width=0.2)}# Add violin plot if requestedif(parameters$add_violin){p<-p+geom_violin(alpha=0.5,fill="lightblue")}return(p)}#' Create heatmap#'#' @param data Data frame#' @param parameters Plot parameters#' @return Heatmapcreate_heatmap<-function(data,parameters){library(ggplot2)# Reshape data for heatmapheatmap_data<-reshape2::melt(data,id.vars=parameters$id_vars)p<-ggplot(heatmap_data,aes_string(x="variable",y="value",fill="value"))+geom_tile()+scale_fill_viridis_c(name=parameters$fill_label%||%"Value")+theme_minimal()+labs(title=parameters$title%||%"Heatmap",x=parameters$x_label%||%"Variable",y=parameters$y_label%||%"Value")+theme(axis.text.x=element_text(angle=45,hjust=1))return(p)}
# R/01-static-visualizations.R (continued)#' Create multi-panel plots#'#' @param data Data frame#' @param parameters Plot parameters#' @return Multi-panel plotcreate_multi_panel_plot<-function(data,parameters){library(ggplot2)# Create base plotbase_plot<-ggplot(data,aes_string(x=parameters$x,y=parameters$y))+geom_point(alpha=0.7)+theme_minimal()# Add facetingif(!is.null(parameters$facet_by)){base_plot<-base_plot+facet_wrap(as.formula(paste("~",parameters$facet_by)))}# Add color mappingif(!is.null(parameters$color_by)){base_plot<-base_plot+aes_string(color=parameters$color_by)+scale_color_viridis_d()}return(base_plot)}#' Create statistical plots#'#' @param data Data frame#' @param parameters Plot parameters#' @return Statistical plotcreate_statistical_plot<-function(data,parameters){library(ggplot2)p<-ggplot(data,aes_string(x=parameters$x,y=parameters$y))+geom_point(alpha=0.7)+theme_minimal()# Add regression lineif(parameters$add_regression){p<-p+geom_smooth(method="lm",se=parameters$show_confidence_interval)}# Add correlation coefficientif(parameters$add_correlation){cor_coef<-cor(data[[parameters$x]],data[[parameters$y]],use="complete.obs")p<-p+annotate("text",x=Inf,y=Inf,label=paste("r =",round(cor_coef,3)),hjust=1,vjust=1)}return(p)}#' Create time series plots#'#' @param data Data frame#' @param parameters Plot parameters#' @return Time series plotcreate_time_series_plot<-function(data,parameters){library(ggplot2)p<-ggplot(data,aes_string(x=parameters$x,y=parameters$y))+geom_line(size=1)+theme_minimal()+labs(title=parameters$title%||%"Time Series Plot",x=parameters$x_label%||%parameters$x,y=parameters$y_label%||%parameters$y)# Add trend lineif(parameters$add_trend){p<-p+geom_smooth(method="loess",se=FALSE,color="red")}# Add seasonal decompositionif(parameters$add_seasonal){# This would require time series decomposition# Implementation depends on specific requirements}return(p)}
# R/02-interactive-visualizations.R (continued)#' Create Shiny visualization app#'#' @param data Data frame#' @param parameters App parameters#' @return Shiny appcreate_shiny_visualization_app<-function(data,parameters){library(shiny)ui<-fluidPage(titlePanel(parameters$title%||%"Data Visualization App"),sidebarLayout(sidebarPanel(selectInput("plot_type","Plot Type",choices=c("Scatter","Line","Bar","Histogram","Box Plot")),selectInput("x_var","X Variable",choices=names(data)),selectInput("y_var","Y Variable",choices=names(data)),sliderInput("alpha","Transparency",min=0,max=1,value=0.7),checkboxInput("add_trend","Add Trend Line",value=FALSE)),mainPanel(plotOutput("plot"),verbatimTextOutput("summary"))))server<-function(input,output){output$plot<-renderPlot({create_dynamic_plot(data,input)})output$summary<-renderText({create_plot_summary(data,input)})}return(shinyApp(ui=ui,server=server))}#' Create dynamic plot based on user input#'#' @param data Data frame#' @param input User input#' @return Dynamic plotcreate_dynamic_plot<-function(data,input){switch(input$plot_type,"Scatter"=create_scatter_plot(data,list(x=input$x_var,y=input$y_var,alpha=input$alpha,add_trend_line=input$add_trend)),"Line"=create_line_plot(data,list(x=input$x_var,y=input$y_var,alpha=input$alpha)),"Bar"=create_bar_plot(data,list(x=input$x_var,y=input$y_var,alpha=input$alpha)),"Histogram"=create_histogram(data,list(x=input$x_var,alpha=input$alpha)),"Box Plot"=create_box_plot(data,list(x=input$x_var,y=input$y_var,alpha=input$alpha)))}#' Create plot summary#'#' @param data Data frame#' @param input User input#' @return Plot summarycreate_plot_summary<-function(data,input){if(input$plot_type%in%c("Scatter","Line")){cor_coef<-cor(data[[input$x_var]],data[[input$y_var]],use="complete.obs")return(paste("Correlation coefficient:",round(cor_coef,3)))}elseif(input$plot_type=="Histogram"){mean_val<-mean(data[[input$x_var]],na.rm=TRUE)sd_val<-sd(data[[input$x_var]],na.rm=TRUE)return(paste("Mean:",round(mean_val,3),"SD:",round(sd_val,3)))}else{return("Summary statistics not available for this plot type.")}}
# Complete visualization pipelinecreate_visualization_pipeline<-function(data,viz_config){# Create base visualizationplot<-create_static_visualization(data,viz_config$plot_type,viz_config$plot_params)# Apply design themethemed_plot<-apply_design_theme(plot,viz_config$theme_type,viz_config$theme_params)# Optimize performanceoptimized_plot<-optimize_visualization_performance(themed_plot,viz_config$optimization_type,viz_config$optimization_params)# Save with optimizationfile_params<-optimize_file_size(optimized_plot,viz_config$output_format,viz_config$file_params)return(list(plot=optimized_plot,file_params=file_params))}