小编Slo*_*ner的帖子

如何在facet_grid中指定列或如何在facet_wrap中更改标签

我有大量的数据系列,我想用小倍数绘制.ggplot2的组合和facet_wrap我想要的,通常产生一个漂亮的小块6 x 6面.这是一个更简单的版本:

facet_wrap

问题是我对小面条上的标签没有足够的控制.数据框中列的名称很短,我希望保持这种方式,但我希望facet中的标签更具描述性.我可以使用,facet_grid以便我可以利用该labeller功能,但似乎没有直接的方式来指定列数和一长串的方面只是不适用于此特定任务.我错过了一些明显的东西吗

facet_grid

问:如何在不更改列名的情况下使用facet_wrap时更改构面标签?或者,如何在使用facet_grid时指定列数和行数?

下面是简化示例的代码.在现实生活中,我正在处理多个组,每个组包含数十个数据系列,每个系列都经常更改,因此任何解决方案都必须自动化,而不是依赖于手动分配值.

require(ggplot2)
require(reshape)

# Random data with short column names
set.seed(123)
myrows <- 30
mydf <- data.frame(date = seq(as.Date('2012-01-01'), by = "day", length.out = myrows),
                   aa = runif(myrows, min=1, max=2),
                   bb = runif(myrows, min=1, max=2),
                   cc = runif(myrows, min=1, max=2),
                   dd = runif(myrows, min=1, max=2),
                   ee = runif(myrows, min=1, max=2),
                   ff = runif(myrows, min=1, max=2))

# Plot using facet wrap - we want to specify the columns
# and …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

40
推荐指数
2
解决办法
5万
查看次数

将文本添加到grid.table图中

我最近开始使用包中的grid.table函数gridExtra将表格数据转换为png图像文件,以便在Web上使用.我一直很高兴,因为它默认产生非常好看的输出,有点像ggplot2桌子.就像提出这个问题的人一样,我很乐意看到能够指定单个列的理由,但那将是一个已经更多的蛋糕.

我的问题是是否可以在a周围添加文本,grid.table以便我可以为绘制的表格提供标题和脚注.在我看来这应该是可行的,但我不太了解网格图形能够解决如何将grobs添加到表格grob.例如,这段代码:

require(gridExtra)

mydf <- data.frame(Item = c('Item 1','Item 2','Item 3'), 
????????????????????Value = c(10,15,20), check.names = FALSE)
grid.table(mydf,
           gpar.coretext=gpar(fontsize = 16),
           gpar.coltext = gpar(fontsize = 16),
           gpar.rowtext = gpar(fontsize = 16),
           gpar.corefill = gpar(fill = "blue", alpha = 0.5, col = NA),
           h.even.alpha = 0.5,
           equal.width = FALSE,
           show.rownames = FALSE,
           show.vlines = TRUE,
           padding.h = unit(15, "mm"),
           padding.v = unit(8, "mm")
           )
Run Code Online (Sandbox Code Playgroud)

生成这个情节:

在此输入图像描述

当我真的希望能够在代码中执行类似下面的操作而不是使用其他应用程序编辑图像时:

在此输入图像描述

r

30
推荐指数
2
解决办法
3万
查看次数

Emacs:导航目录和打开文件的好策略是什么?

上周,由于不得不应对R和Perl的不同IDE而感到激怒(我再也不喜欢或者使用其中的任何一个以获得非常舒适),我决定尝试使用Emacs.如果没有我的某种惶恐,就不会做出这个决定.我主要用于带有cperl的Perl和带有ESS的R.我的环境是Windows 7 Ultimate 64位,我正在运行v23.4.1,我认为这是代表我安装的ESS软件包.

差不多一个星期到目前为止,它已经令人惊讶地无痛,没有任何其他重要软件的参与.我已经将我的ctrl键重新映射到大写锁定,更改了默认文件夹,与.emacs混淆并添加了一些功能,如自动安装,yasnippet,颜色主题,冰柱和其他一些.显然,那里有一些非常复杂的东西.当然,基本Emacs的某些功能立即非常强大和有用,例如isearching up和down.总的来说,我感到惊喜和放心.

有一件事比我想象的还要粗糙,就是查找和打开文件的过程.在粗略阅读各种教程后,我得到了这个准魔法文件位置和文件名自动完成的图像.我的设置中的主目录有g:/ roaming/code/perl或g:/ roaming/code/R /等路径,但我经常需要分支到完全不同的路径,如g:/ pricingata/support files/sector/project01 /等等.

目前,当我需要使用不同的fork时,我会费力地删除文件路径,然后使用auto-complete深入到文件系统的那个分支.二十年前,它让我回到Amiga上运行bash shell.

我有什么期望?类似于(使用上面的示例)键入'project01'以立即跳到路径底部的文件夹中.出于某种原因,我在脑海中得到了Emacs预加载目录的想法.所以也许这是不现实的.

我的猜测是,我的困难可能源于我自己缺乏熟悉而不是Emacs的结构性缺陷,并导致我的问题.我不能抱怨没有足够的文件; 相反,有大量的信息,它是随意分散的.冰柱有类似的问题 - 如果有什么太多的话.

1)尝试在迷你缓冲区中打开文件或使用其他方法时,在文件树的不同分支周围移动的最佳策略是什么?是否有可用于从一个地方快捷方式到另一个地方的别名,还是可以指定要预加载的目录?人们只是光盘很多吗?或者我是从完全错误的角度来看这个并且需要采取不同的策略?

2)通过附加设置,可以通过前缀使用通配符等自动完成用于在(例如)project01中找到文件吗?我应该关注什么才能在这里变得更有效率?我没有利用像冰柱,任何东西等附加功能吗?

我意识到这些问题更加危险地关闭了没有明确答案的弃用类别.我的辩护是,在我承诺养成不良习惯或不良的长期解决方案之前,现阶段的一些提示/指导将受到欢迎,我怀疑这些答案将使其他可能正在考虑转换的人受益.如果有问题,我很乐意撤回或改写.

emacs icicles

27
推荐指数
6
解决办法
7786
查看次数

R:使用日期列表作为过滤器来子集数据帧

我有一个数据框,其中包含日期列和一些其他值列.我想从数据框中提取日期列与预先存在的日期列表中的任何元素匹配的行.例如,使用一个元素的列表,日期"2012-01-01"将从数据框中提取日期为"2012-01-01"的行.

对于数字,我想我知道如何匹配这些值.这段代码:

testdf <- data.frame(mydate = seq(as.Date('2012-01-01'), 
                                  as.Date('2012-01-10'), by = 'day'),
                     col1 = 1:10,
                     col2 = 11:20,
                     col3 = 21:30)
Run Code Online (Sandbox Code Playgroud)

...生成此数据框:

       mydate col1 col2 col3
1  2012-01-01    1   11   21
2  2012-01-02    2   12   22
3  2012-01-03    3   13   23
4  2012-01-04    4   14   24
5  2012-01-05    5   15   25
6  2012-01-06    6   16   26
7  2012-01-07    7   17   27
8  2012-01-08    8   18   28
9  2012-01-09    9   19   29
10 2012-01-10   10   20   30
Run Code Online (Sandbox Code Playgroud)

我可以做这个:

testdf[which(testdf$col3 %in% c('25','29')),]
Run Code Online (Sandbox Code Playgroud)

产生这个: …

r

24
推荐指数
2
解决办法
4万
查看次数

R:从用RCurl抓取的网页中提取"干净"的UTF-8文本

使用R,我试图刮一个网页,将日文文本保存到文件中.最终,这需要扩展到每天处理数百页.我已经在Perl中有一个可行的解决方案,但我正在尝试将脚本迁移到R以减少在多种语言之间切换的认知负荷.到目前为止,我没有成功.相关的问题似乎是关于保存csv文件将此希伯来文写入HTML文件的问题.但是,我没有成功地根据那里的答案拼凑出一个解决方案.编辑:关于R的UTF-8输出的这个问题也是相关的但是没有解决.

这些页面来自Yahoo! 日本财务和我的Perl代码看起来像这样.

use strict;
use HTML::Tree;
use LWP::Simple;
#use Encode;
use utf8;

binmode STDOUT, ":utf8";

my @arr_links = ();
$arr_links[1] = "http://stocks.finance.yahoo.co.jp/stocks/detail/?code=7203";
$arr_links[2] = "http://stocks.finance.yahoo.co.jp/stocks/detail/?code=7201";

foreach my $link (@arr_links){
    $link =~ s/"//gi;
    print("$link\n");
    my $content = get($link);
    my $tree = HTML::Tree->new();
    $tree->parse($content);
    my $bar = $tree->as_text;
    open OUTFILE, ">>:utf8", join("","c:/", substr($link, -4),"_perl.txt") || die;
    print OUTFILE $bar;
}
Run Code Online (Sandbox Code Playgroud)

此Perl脚本生成一个类似于下面屏幕截图的CSV文件,其中包含可以离线挖掘和操作的正确的汉字和假名:

Perl脚本生成的CSV文件

我的R代码,如下所示,如下所示.R脚本与刚刚给出的Perl解决方案不完全相同,因为它不会删除HTML并留下文本(这个答案暗示了一种使用R的方法,但在这种情况下它对我不起作用)并且它没有循环等等,但意图是一样的.

require(RCurl)
require(XML)

links <- list()
links[1] <- "http://stocks.finance.yahoo.co.jp/stocks/detail/?code=7203"
links[2] <- "http://stocks.finance.yahoo.co.jp/stocks/detail/?code=7201"

txt …
Run Code Online (Sandbox Code Playgroud)

r web-scraping rcurl

15
推荐指数
1
解决办法
5124
查看次数

R ggplot和facet网格:如何控制x轴断点

我试图使用ggplot绘制每个日历年的时间序列中的变化,并且我对x轴的精细控制存在问题.如果我不使用scale="free_x"那么我最终得到一个x轴,显示几年以及有问题的年份,如下所示:

具有共同x轴的小平面网格图

如果我确实使用scale="free_x"那么就像人们所期望的那样,我最终会得到每个情节的刻度标签,并且在某些情况下会因情节而异,我不想要:

具有自由x轴的小平面网格图

我已尝试使用scale_x_date等来定义x轴,但没有任何成功.我的问题是:

问:如何控制ggplot facet网格上的x轴断点和标签,使得(时间序列)x轴对于每个面都相同,仅显示在面板的底部,并采用月份格式1,2,3等或'Jan','Feb','Mar'?

代码如下:

require(lubridate)
require(ggplot2)
require(plyr)

# generate data
df <- data.frame(date=seq(as.Date("2009/1/1"), by="day", length.out=1115),price=runif(1115, min=100, max=200))
# remove weekend days
df <- df[!(weekdays(as.Date(df$date)) %in% c('Saturday','Sunday')),]
# add some columns for later
df$year <- as.numeric(format(as.Date(df$date), format="%Y"))
df$month <- as.numeric(format(as.Date(df$date), format="%m"))
df$day <- as.numeric(format(as.Date(df$date), format="%d"))

# calculate change in price since the start of the calendar year
df <- ddply(df, .(year), transform, pctchg = ((price/price[1])-1))

p <- ggplot(df, aes(date, pctchg)) +
  geom_line( aes(group = 1, …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 plyr

14
推荐指数
1
解决办法
1万
查看次数

我如何说服ggplot2 geom_text标记时间序列图中的指定日期?

我正在使用ggplot2绘制时间序列数据的简单折线图.我遇到的一个难点是标记对应于x轴值的特定点,即日期.

library(ggplot2)
library(scales)
date <- c("2011-09-19","2011-09-20","2011-09-21",
    "2011-09-22","2011-09-23","2011-09-26","2011-09-27")
price <- c(100,110,105,115,120,115,125)
tmp <- data.frame(date,price)
tmp$date <- as.Date(tmp$date)
p <- ggplot(tmp,aes(tmp$date,tmp$price))
p <- p + xlab("Date")
p <- p + ylab("Price")
p <- p + layer(geom = "line")
p <- p + opts(title="Simple price plot")
print(p)
Run Code Online (Sandbox Code Playgroud)

我想要做的是为特定日期添加注释,该日期可能是最大值或最小值或其他值.到目前为止,我使用的geom_text的所有排列都未能达到我想要的效果(或者确实有用).在SO上有一些问题,但大多数似乎与散点图而不是时间序列有关; 我没有成功地尝试适应它们.我也花了一些时间来处理文档,但我的理解仍然有限.任何指针将不胜感激.

r time-series ggplot2

13
推荐指数
1
解决办法
2万
查看次数

R:生成没有重复元素的矢量的所有排列

是否有一种直接的方法来生成一个整数向量(1到最大999)的所有可能的排列,这些排列明确地排除了重复的元素?

例如,对于具有1到9范围内的三个元素的向量,序列1 2 3将是可接受的,1 2 9但是1 2 2将是无效的.序列必须包含确切的n元素(在本例中为三个).编辑:为了避免混淆,订单很重要,因此1 2 9并且9 2 1都是有效的和必需的.

关于使用R on SO(例如thisthis)的排列和组合有很多问题,但似乎没有一个适合这种特殊情况.我希望有一个不起眼的基础R或包功能,它将照顾它,而我自己不必写一个没有优势的功能.

r

12
推荐指数
3
解决办法
2万
查看次数

没有Java经验的Clojure开始 - 如何最好地组织和运行项目?

对这一系列相关问题的某种话语性质提前道歉; 我希望答案对于Clojure的新人来说是一个有用的资源.

我刚刚开始学习Clojure,部分是由于这篇文章的动机.我不是一个专业的开发人员,但我有几十年的编程经验(ARexx,VB/VBScript/VBA,然后Perl和2011年开始的每日使用R).我的平台是Windows 7 64位.我在Java 1.7.0_45 Java Hotspot 64位服务器上使用Emacs 24.3,cider 20131221和Leiningen 2.3.3.我已经购买了Clojure编程Clojure数据分析手册,并深入研究了两者.我发现它们很有前景,但我迷失在细节中.

显然,要做的是陷入困境并尝试代码练习和小任务,但对我来说,当前的问题一直是构造,组织甚至只是在Clojure中运行项目的复杂性.使用RI可以获得包含大量代码的纯文本文件,可能还有一两个包含大型项目的常用函数的文本.

Clojure 非常不同,没有Java经验,我很难将各个部分拼凑起来.Clojure Programming有一整章关于组织和构建项目,但它是如此全面,反过来我发现现在很难弄清楚与我相关的信息.我想我在Swank上寻找类似这样的答案,但是从那以后这些工具似乎已经开始了.所以这里.

  1. Leiningen除其他外还生成project.clj包含项目定义和依赖项的文件.我想我明白了.我是否可以将此文件用于与定义无关的代码defproject,或者最好不要使用此文件,并将代码本身放在不同的clj文件中?
  2. 如果答案是project.clj单独保留文件,那么该文件与其他文件之间的关系如何建立?是否只是clj将项目文件夹中的所有文件都计入项目的一部分?
  3. 如何定义主代码文件,即项目的"入口点"?比方说,我有project.cljmain.clj一些辅助功能common.clj-如何将这三个文件之间的关系界定?我可以调用函数,main.clj但是如果/当我将项目打包成uberjar时,项目如何知道main是项目的核心?
  4. 如果我有多个clj文件,导入函数的最佳方法是什么?我已经阅读过requireuse(和importrefer......),但我并不完全理解这两个关键字很难找到.Clojure数据分析手册中的REPL示例通常是选择的use.我发现了一个类似的问题,但它有点过头了.
  5. 这是更具针对性的工具,但是由于Emacs似乎被广泛使用,似乎可以公平地问:在main.clj上面给出的例子中给出一小段代码是一个很好的工作流程?目前我只是main.clj在Emacs中打开文件,做一个M-x cider-jack-in建立REPL,在REPL中进行实验,然后当我想尝试一些东西时,我选择整个缓冲区并Eval region从CIDER菜单中选择(C-c C-R).这个标准操作程序还是完全错误的?
  6. 是否有定义命名空间的约定?我想我明白命名空间可以覆盖多个clj文件,ns用于定义命名空间.我应该在每个代码文件中明确定义名称空间(在开头)吗?Clojure …

clojure

10
推荐指数
1
解决办法
751
查看次数

在geom_tile中订购轴标签

我有一个数据框,其中包含来自20多个国家/地区的20多种产品的订单数据.我把它放在一个高亮表中使用ggplot2代码类似于:

require(ggplot2)
require(reshape)
require(scales)

mydf <- data.frame(industry = c('all industries','steel','cars'), 
    'all regions' = c(250,150,100), americas = c(150,90,60), 
     europe = c(150,60,40), check.names = FALSE)
mydf

mymelt <- melt(mydf, id.var = c('industry'))
mymelt

ggplot(mymelt, aes(x = industry, y = variable, fill = value)) +
    geom_tile() + geom_text(aes(fill = mymelt$value, label = mymelt$value))
Run Code Online (Sandbox Code Playgroud)

这产生了这样的情节:

突出表

在真实的情节中,450细胞表非常好地显示了订单集中的"热点".我想要实现的最后一个改进是按字母顺序在x轴和y轴上排列项目.因此,在上面的曲线图中,y轴(variable)将被排序为all regions,americas,然后europe与x轴(industry)将被排序all industries,carssteel.事实上,x轴已按字母顺序排序,但如果不是这样,我不知道如何实现.

关于不得不提出这个问题,我感到有些尴尬,因为我知道在SO上有许多类似的东西,但R中的排序和排序仍然是我的个人bugbear,我无法让这个工作.虽然我确实尝试过,除了最简单的情况之外,我在一连串的电话中丢失了factor,levels.sort,order …

r ggplot2

9
推荐指数
1
解决办法
1万
查看次数

标签 统计

r ×8

ggplot2 ×4

clojure ×1

emacs ×1

icicles ×1

plyr ×1

rcurl ×1

time-series ×1

web-scraping ×1