使用ggplot 2迭代单个图形

时间:2014-05-25 16:04:23

标签: sql r ggplot2

请查看下面的代码(一些专有信息发布,但意图应该出现):

query <- "Select  convert(varchar(10),PRICE_DATE,103) as Price_date, ISIN, PRICE_SRC, PRICE from ``
    where ISIN in ('BE0119096775',
    'US80685QAA40',
    'US00139PAA66',
    'US705010AB25')
     and PRICE_DATE > '20140101' and PRICE_SRC in ('BRC_INDEX', 'REUTERS','BVAL')
    order by ISIN, PRICE_DATE"

# Squish query to a flat string
query <- strwrap(query,width=nchar(query),simplify=TRUE)

# Open database, grab data and close connection
ch <- odbcDriverConnect("driver={SQL Server};server=;Database=;", rows_at_time = 1024)
result <- sqlQuery(ch, query, as.is=c(TRUE, TRUE, TRUE))
close(ch)

result <- (na.omit(result))

names(result)[1] <- "Price_Date"

result$Price_Date <- as.Date(result$Price_Date, format = "%d/%m/%Y")
result$PRICE_SRC <- as.character(result$PRICE_SRC) 
result$PRICE <- as.numeric(result$PRICE)
result$PRICE_SRC <- as.factor(result$PRICE_SRC)

result$PRICE_SRC <- factor(result$PRICE_SRC, levels=c("BRC_INDEX","BVAL","REUTERS"),labels=c("Vendor1","Vendor2","REUTERS"))

result <- melt(result, id=c("Price_Date","PRICE_SRC","PRICE"))

ggplot(data=result, aes(x=Price_Date, y=PRICE, group = PRICE_SRC, colour = PRICE_SRC)) +
  geom_line() +
  geom_point( size=4, shape=21, fill="white") +
  facet_wrap(~value, ncol = 2)

我已使用facet_wrap在数据框=结果中制作每个ISIN的图表。我希望能够做出单身&#34;图表无需编写代码&#34;一遍又一遍&#34;再次。所以问题是,如果有人能够帮助解决任何其他问题的ggplot语法,从而如上所述从一个数据帧创建多个图形。

结果将是按供应商和日期分割的每个ISIN的一系列观察结果。

感谢并抱歉我的问题中有任何明显的错误。

于Lh

1 个答案:

答案 0 :(得分:2)

来自filter()包的dplyr呢。

require(dplyr)
require(ggplot2)

示例数据:

data <- data.frame( var = rep(letters[1:3],each=10), value = rnorm(30) )

过滤器和图:

您可以过滤特定变量的主数据框,如下所示:

tmp_data <- filter(data,var == "a")
plot_object <-  ggplot(tmp_data,aes(value)) + geom_density()

您可以使用magrittr管道语法:

执行相同的操作
plot_object <- data %>% 
                    filter(var == "a") %>% 
                    ggplot(., aes(value)) + geom_density()

遍历所有变量:

要遍历所有变量并一次一个地绘制它们,您可以执行以下操作:

 plot_object_ls <- lapply( levels(data$var),
                                function(x) {
                                        data %>% 
                                        filter(var == x) %>% 
                                        ggplot(., aes(value)) + geom_density()
                                            })

如果这是您想要的,那么控制台上的plot_object_ls会将它们全部绘制出来。