当我使用时rgl::spheres3d(),渲染的球体具有笨重的刻面边缘.
spheres = data.frame(x = c(1,2,3), y = c(1,3,1),
color = c("#992222" , "#222299", "#229922"))
open3d()
spheres3d(spheres$x, spheres$y, radius = 1, color = spheres$color)
Run Code Online (Sandbox Code Playgroud)
设置material3d(smooth = TRUE, line_antialias = TRUE)不会改善这一点.增加半径也无济于事.有没有办法增加它们的平滑度?
我想在向量中找到位置,其中值与向量中较早的点相差超过某个阈值.应该相对于矢量中的第一个值来测量第一个变化点.应相对于先前的变化点测量后续变化点.
我可以使用for循环来做到这一点,但我想知道是否有更惯用和更快的矢量化灵魂.
最小的例子:
set.seed(123)
x = cumsum(rnorm(500))
mindiff = 5.0
start = x[1]
changepoints = integer()
for (i in 1:length(x)) {
if (abs(x[i] - start) > mindiff) {
changepoints = c(changepoints, i)
start = x[i]
}
}
plot(x, type = 'l')
points(changepoints, x[changepoints], col='red')
Run Code Online (Sandbox Code Playgroud)
我需要帮助将图表处理成多个pdf页面.这是我目前的代码:
file <- read.csv(file="file.csv")
library(ggplot2)
library(gridExtra)
library(plyr)
gg1 <- ggplot() +
geom_line(aes(x=TIME, y=var1, colour = "z1"), file) +
geom_line(aes(x=TIME, y=var2, colour = "z2"), file) +
geom_point(aes(x=TIME, y=var3), file) + facet_wrap( ~ ID, ncol=5)+
xlab("x") +
ylab("Y") +
ggtitle(" x ") + scale_colour_manual(name="Legend",
values=c(z1="red", z2 ="blue")) + theme(legend.position="bottom")
gg10 = do.call(marrangeGrob, c(gg1, list(nrow=4, ncol=4)))
ggsave("need10.pdf", gg10)
Run Code Online (Sandbox Code Playgroud)
这是创建的图像,不分割我的图像
我希望有一个代码可以在多个页面中以4乘4的布局绘制我的绘图.我的代码的最后两行需要调整,我不知道如何自己修复它.
我正在尝试DiagrammeR根据此答案创建甘特图。
但是如果部分名称太长,它们会溢出到图表中。这是一个例子。
library(DiagrammeR)
mermaid("
gantt
dateFormat YYYY-MM-DD
title Project timeline
section A ridiculously long section name
create data structures :done, frame1, 2019-01-01, 2019-02-28
section Another long section name
refactor mistakes in data structures :active, frame2, after frame1, 12w
section Section 3
Write code :active, first_1, after frame1, 2019-06-30
Party :crit, first_2, after first_1, 7d
")
Run Code Online (Sandbox Code Playgroud)
有人知道如何调整部分标签列的宽度吗? ?mermaid不提供任何解释。这个帮助页面(https://mermaidjs.github.io/gantt.html)只在语法部分说“TBD”。
我想用底部的图例制作一个情节,但图例总是被剪掉......因为它似乎ggplot2无法自动确定底部图例中的最佳列数,我尝试自己做......没有成功。
假设我有以下mydf数据框:
mydf <- data.frame(group=paste0('gr',1:10), var=paste('some long text -', LETTERS), value=runif(260, 0, 100))
head(mydf)
# group var value
#1 gr1 some long text - A 7.941256
#2 gr2 some long text - B 50.740651
#3 gr3 some long text - C 89.068872
#4 gr4 some long text - D 77.572413
#5 gr5 some long text - E 9.792349
#6 gr6 some long text - F 35.194944
Run Code Online (Sandbox Code Playgroud)
我希望我的输出图的宽度为 12(英寸)。
当我用 绘制图时ggplot2,图例的宽度大于图并被剪切:
width_scale <- 12
grDevices::pdf(file='test.pdf', …Run Code Online (Sandbox Code Playgroud) 我有一个来自 ASTER 数据库的大高程栅格,使用raster::mosaic(). 每个瓦片代表地球的 1 度 x 1 度部分,估计栅格分辨率为 30m^2。我在下面包含了我用来镶嵌它们的代码,但我不认为这是问题所在。
Mosaic <- do.call(mosaic,c(list of rasters, tolerance = 1, fun=mean)
Run Code Online (Sandbox Code Playgroud)
运行后,我会得到以下海拔 tif,您可以在此处下载。
然后我使用 测量地形坚固性raster::terrain(),使用地形坚固性指数作为我的方法:
TRI <- terrain(Mosaic, opt="TRI")
Run Code Online (Sandbox Code Playgroud)
这产生:
如您所见,地图中有我无法解释的微弱条纹。由于我的研究范围很广,我需要将此栅格聚合为较粗的分辨率。因此,我也在 raster 包中使用了聚合函数。
TRI_Agg <- aggregate(TRI,fact = 255, fun = mean)
Run Code Online (Sandbox Code Playgroud)
在这里,您可以看到条纹在整个地图中更加明显且相当一致。我尝试在其他研究领域这样做,但问题仍然存在(即世界各地的光栅图块都会发生这种情况)。我无法解释为什么会出现这些条纹。我尝试了不同的方法来解决这个问题,包括进行邻域分析(如果有的话,填充缺失值)和在将它们拼接在一起之前处理瓷砖。这些都没有奏效。
当我之前聚合栅格时,粗糙度计算,条纹不会出现,这让我相信使用aggregate(). 但是,对于我的特定研究问题,我无法使用聚合栅格计算 TRI。
我试图在 plotly 中订购堆积条形图,但它不尊重我在数据框中传递它的顺序。
最好使用一些模拟数据来显示:
library(dplyr)
library(plotly)
cars <- sapply(strsplit(rownames(mtcars), split = " "), "[", i = 1)
dat <- mtcars
dat <- cbind(dat, cars, stringsAsFactors = FALSE)
dat <- dat %>%
mutate(carb = factor(carb)) %>%
distinct(cars, carb) %>%
select(cars, carb, mpg) %>%
arrange(carb, desc(mpg))
plot_ly(dat) %>%
add_trace(data = dat, type = "bar", x = carb, y = mpg, color = cars) %>%
layout(barmode = "stack")
Run Code Online (Sandbox Code Playgroud)
结果图不遵守顺序,我希望最大 mpg 的汽车堆叠在每个气缸组的底部。有任何想法吗?
如果数据中有 ,则NA对R 中的稀疏矩阵执行矩阵乘法会产生与对相同矩阵的密集形式执行的相同操作不同的结果。
一些数据来证明:
library(Matrix)
set.seed(123)
m1 <- Matrix(data=sample(c(0,0,0,0,0,1,2,NA),25, T), ncol = 5, nrow = 5, sparse = F)
m2 <- Matrix(data=sample(c(0,0,0,0,0,1,2,NA),25, T), ncol = 5, nrow = 5, sparse = F)
sm1 <- Matrix(m1, sparse = T)
sm2 <- Matrix(m2, sparse = T)
Run Code Online (Sandbox Code Playgroud)
现在如果我们这样做
m1 %*% m2
# 5 x 5 Matrix of class "dgeMatrix"
# [,1] [,2] [,3] [,4] [,5]
# [1,] NA NA NA NA NA
# [2,] 2 NA 0 0 2
# …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 ggplot2 创建带有对数轴的水平箱线图。但是,胡须的长度是错误的。
一个最小的可重现示例:
一些数据
library(ggplot2)
library(reshape2)
set.seed(1234)
my.df <- data.frame(a = rnorm(1000,150,50), b = rnorm(1000,500,150))
my.df$a[which(my.df$a < 5)] <- 5
my.df$b[which(my.df$b < 5)] <- 5
Run Code Online (Sandbox Code Playgroud)
如果我使用基本 R 绘制此图boxplot(),一切都很好
boxplot(my.df, log="x", horizontal=T)
Run Code Online (Sandbox Code Playgroud)
但有了 ggplot,
my.df.long <- melt(my.df, value.name = "vals")
ggplot(my.df.long, aes(x=variable, y=vals)) +
geom_boxplot() +
scale_y_log10(breaks=c(5,10,20,50,100,200,500,1000), limits=c(5,1000)) +
theme_bw() + coord_flip()
Run Code Online (Sandbox Code Playgroud)
我得到了这个图,其中晶须的长度错误(例如,请参见晶须下方有许多额外的异常值,而上方没有异常值)。
请注意,如果没有对数轴,ggplot 的胡须长度正确
ggplot(my.df.long, aes(x=variable, y=vals)) +
geom_boxplot() +
theme_bw() + coord_flip()
Run Code Online (Sandbox Code Playgroud)
如何使用 ggplot 和正确长度的胡须生成水平对数箱线图?优选地,晶须延伸至 IQR 的 1.5 倍。
注意,如此处所述。可以使用coord_trans(y = "log10")代替,这将导致在转换数据 …
我正在研究生物信息学,我需要输出一个包含祖先结果的图表(条形图)。通常,这些图表是通过将人群分组在一起来绘制的。完成的方法是,您只需绘制不同假定人群(此处为 4)的 Q 分数(下面的数据)的条形图。
问题是我用来ord = tbl[order(tbl$V1,tbl$V2,tbl$V3),]对我的值进行排序。这样我就看到一些条形图没有聚集在正确的群体中(参见图中应与第一组聚集在一起的橙色条形图)。因此,我想知道如何按颜色(代表人口)对条形进行聚类。
有办法解决这个问题吗?
barplotgeno <- function(tbl, # To plot the Q scores (ancestry).
col = c("#FF3030", # nice colors
"#9ACD31",
"#1D90FF",
"#FF8001"),
pdf = TRUE,
pdf.path.name = "~/Desktop/Stacked_barplot.pdf") {
ord = tbl[order(tbl$V1,tbl$V2,tbl$V3),]
if(pdf) {
pdf(pdf.path.name, width = 11, height = 8.5)
bp = barplot(t(as.matrix(ord[,1:dim(ord)[2]-1])),
space = c(0.2),#space = c(0),# Space between the bars
col=col, #rainbow(4),
xlab="Individual #",
ylab="Ancestry", xaxt="n",
border=NA, main = "Stacked barplot from ADMIXTURE analysis")
labs <- row.names(ord)
text(cex=0.5, x=bp+1, y=-0.03, …Run Code Online (Sandbox Code Playgroud)