我想使用ggplot2绘制一些不同的数据项,使用两个不同的色标(一个连续和一个离散来自两个不同的df).我可以准确地描绘出我个人喜欢的方式,但我不能让它们一起工作.看起来你不能在同一个情节中运行两种不同的色标吗?我在这里和这里看到过类似的问题,这让我相信我想要实现的目标在ggplot2中是不可能的,但是如果我错了,我想说明我的问题,看看是否有变通.
我有一些GIS流数据,附有一些分类属性,我可以绘制(p1在下面的代码中)以获得:

我还有一组具有连续响应的位置,我也可以绘制(p2在下面的代码中)以获得:
但是我无法将两者结合起来(p3在下面的代码中).我收到这个错误
比例误差[[prev_aes]]:尝试选择少于一个元素
注释掉该行scale_colour_hue("Strahler order") +会将错误更改为
错误:提供给连续刻度的离散值
基本上似乎ggplot2对geom_path呼叫和geom_point呼叫使用相同的比例类型(连续或离散).因此,当我将离散变量传递 factor(Strahler)给scale_colour_gradientn比例时,绘图失败.
有没有解决的办法?如果有data一个scale函数的参数告诉它应该映射或设置属性,那将是惊人的.这甚至可能吗?
非常感谢和可重现的代码如下:
library(ggplot2)
### Download df's ###
oldwd <- getwd(); tmp <- tempdir(); setwd(tmp)
url <- "http://dl.dropbox.com/u/44829974/Data.zip"
f <- paste(tmp,"\\tmp.zip",sep="")
download.file(url,f)
unzip(f)
### Read in data ###
riv_df <- read.table("riv_df.csv", sep=",",h=T)
afr_df <- read.table("afr_df.csv", sep=",",h=T)
vil_df <- read.table("vil_df.csv", sep=",",h=T)
### Min and max for plot area ###
xmin …Run Code Online (Sandbox Code Playgroud) 请参阅下面的编辑 使用R,我想过滤矩阵(基因表达数据)并仅保留具有高方差值的行(基因/探针).例如,我只想保留具有底部和顶部百分位数值的行(例如,低于20%且高于80%).我想将我的研究仅限于下游分析的高变异基因.R中有基因过滤的常用方法吗?
我的矩阵有18个样本(列)和47000个探针(行),其值为log2变换和标准化.我知道该quantile()功能可以识别每个样品列中的20%和80%截止值.我无法弄清楚如何为整个矩阵找到这些值,然后将原始矩阵子集化以删除所有"非变化"行.
示例矩阵的平均值为5.97,因此最后三行应该被删除,因为它们包含20%和80%截止值之间的值:
> m
sample1 sample2 sample3 sample4 sample5 sample6
ILMN_1762337 7.86 5.05 4.89 5.74 6.78 6.41
ILMN_2055271 5.72 4.29 4.64 5.00 6.30 8.02
ILMN_1736007 3.82 6.48 6.06 7.13 8.20 4.06
ILMN_2383229 6.34 4.34 6.12 6.83 4.82 5.57
ILMN_1806310 6.15 6.37 5.54 5.22 4.59 6.28
ILMN_1653355 7.01 4.73 6.62 6.27 4.77 6.12
ILMN_1705025 6.09 6.68 6.80 6.85 8.35 4.15
ILMN_1814316 5.77 5.17 5.94 6.51 7.12 7.20
ILMN_1814317 5.97 5.97 5.97 5.97 5.97 5.97
ILMN_1814318 5.97 5.97 …Run Code Online (Sandbox Code Playgroud) 在我的一些情节中,我发现很难看到颜色条中的刻度线.我无法找到改变蜱虫颜色的文件化方法.所有示例似乎都专注于更改标签或根本不绘制刻度.可能吗?
# Data
require(ggplot2)
require(grid)
n <- 100
x <- y <- seq(-4*pi, 4*pi, len=n)
r <- cos( sqrt( outer(x^2, y^2, "+") ) ^ 2 )
df <- data.frame( x = rep( x , each = n) , y = rep( y , times = n ) , val = c(r) )
# Plot
ggplot( df , aes( x , y , fill = val ) )+
geom_raster()+
scale_fill_gradient( low = "#FFFFFF" , high = "#de2d26" )+
guides( fill = …Run Code Online (Sandbox Code Playgroud) 有没有办法获取文本字符串的控制字符,例如在plotmath表达式中"\n"进行newline评估,反之亦然.在下面的例子中,我想结合:
在阅读完这个问题之后,我可以通过替代来获得大部分内容,但newline不会对角色进行评估.现在我转圈圈,并用自己的困惑plotmath,parse,bquote和substitute.在plotmath 的帮助页面中,它说
与普通绘图不同,控制字符(例如\n)不会在plotmath中的字符串中解释.
这是否意味着它真的不可能?
lab = "some data"
form = "Exponential"
x = 1:10
y = x^2
plot( x , y , type = "b" )
title( main = substitute( paste( "Plot of " , phi , " of: " , lab , "\nFunctional form: " , form ) , list(lab = lab , form = form …Run Code Online (Sandbox Code Playgroud) 在为plotmath情节标题提供表达时,我觉得它的paste效果就像paste,但现在我不确定.它是plotmath函数的特殊参数吗?在plotmath paste()行为就像paste0()和paste0被直接引用,而sep的论点paste()被忽略,但在表达没有报价.怎么paste()解释?请参阅以下四个示例:
# Data to plot
x <- seq( 55 , 70 , length = 2001 )
probs <- dexp( x , rate = 5 / 60 )
s <- sample( x , 10000 , prob = probs , repl = TRUE )
# Some plots
par(mfrow = c(2,2) )
#1) paste() behaves like paste0() here
hist( s , breaks = …Run Code Online (Sandbox Code Playgroud) 我想使用apply来遍历矩阵的行,我想在我的函数中使用当前行的rowname.看来你不能使用rownames,colnames,dimnames或names直接在函数内部.我知道我可能会根据此问题中的信息创建一个解决方法.
但我的问题是如何apply在它的第一个参数中处理数组的行名和列名,以及在函数内部创建的对象的名称赋值apply?它看起来有点不一致,我希望通过以下示例来展示.有没有理由为它设计这样的?
# Toy data
m <- matrix( runif(9) , nrow = 3 )
rownames(m) <- LETTERS[1:3]
colnames(m) <- letters[1:3]
m
a b c
A 0.5092062 0.3786139 0.120436569
B 0.7563015 0.7127949 0.003358308
C 0.8794197 0.3059068 0.985197273
# These return NULL
apply( m , 1 , FUN = function(x){ rownames(x) } )
NULL
apply( m , 1 , FUN = function(x){ colnames(x) } )
NULL
apply( m …Run Code Online (Sandbox Code Playgroud) 我已经看到了很多关于写入文件的问题,但我想知道打开文本文件最有效的方法是什么,附加一些数据然后在你要从多个连接写入时再次关闭它(即并行计算情况),并不能保证每个连接何时都要写入文件.
例如,在下面的玩具示例中,它只使用我桌面上的核心,它似乎工作正常,但我想知道如果写入时间越长并且写入文件的进程数量增加,此方法是否容易失败(特别是在可能存在延迟的网络共享中).
任何人都可以建议一种强大的,明确的方式,当可能有其他想要同时写入文件的从属进程时,应该打开,写入然后关闭连接吗?
require(doParallel)
require(doRNG)
ncores <- 7
cl <- makeCluster( ncores , outfile = "" )
registerDoParallel( cl )
res <- foreach( j = 1:100 , .verbose = TRUE , .inorder= FALSE ) %dorng%{
d <- matrix( rnorm( 1e3 , j ) , nrow = 1 )
conn <- file( "~/output.txt" , open = "a" )
write.table( d , conn , append = TRUE , col.names = FALSE )
close( conn )
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找最好的 …
我需要在循环中堆叠一些栅格,如:
for(month in 1:12){
.
.
.
"some algorithm spiting out a raster called 'sm_esa'"
sm_esa_stack<-stack(sm_esa)
}
Run Code Online (Sandbox Code Playgroud)
最后,我想创建一个包含12层(每层一个月)的堆栈.但是我的最后一行显然会覆盖每一个新的栅格而不是叠加.任何提示?
我在R中遇到一个带有字符类型变量的问题.我在数据框中的变量有这样的结构:
X1
ANGLO AUTOMOTRIZ S.A. MATRIZ
AUTOMOTORES Y ANEXOS / AYASA
ECUA - AUTO S.A. MATRIZ
METROCAR S.A. 10 DE AGOSTO
MOSUMI LA "Y"
Run Code Online (Sandbox Code Playgroud)
我的问题是我想要一个没有的新变量./-"",字符串必须组成一个没有空格,如下所示:
X2
ANGLOAUTOMOTRIZSAMATRIZ
AUTOMOTORESYANEXOSAYASA
ECUAAUTOSAMATRIZ
METROCARSA10DEAGOSTO
MOSUMILAY
Run Code Online (Sandbox Code Playgroud)
可以在R中做到这一点.谢谢.
我在我的列中data.table包含了我想用来更新一堆其他列的数据.这个数据是一个列表,我需要根据我将在SD表达式中包含的每个列中的值对列表进行子集化
dt <- data.table( A = list( c("X","Y") , c("J","K") ) , B = c(1,2) , C = c(2,1) )
# A B C
#1: X,Y 1 2
#2: J,K 2 1
Run Code Online (Sandbox Code Playgroud)
# A B C
#1: X,Y X Y
#2: J,K K J
Run Code Online (Sandbox Code Playgroud)
# Column A is not included in SD so not found...
dt[ , lapply( .SD , function(x) A[x] ) , .SDcols = 2:3 ]
#Error in FUN(X[[1L]], ...) : object 'A' …Run Code Online (Sandbox Code Playgroud)