标签: ggplot2

R - 如何将变量传递给ggplot

我用来ggplot生成带有拟合线的散点图,如下所示

ggplot(df, aes(x=colNameX, y=colNameY)) + 
    geom_point() +
    geom_smooth(method=loess, se=T, fullrange=F, size=1) + ylim(0,5)
Run Code Online (Sandbox Code Playgroud)

鉴于此,想要将上面概括为一个采用以下参数的函数

scatterWithRegLine = function(df, xColName, yColName, regMethod, showSe, showFullrange, size, yAxisLim) {

  # How should I use the variables passed into the function above within ggplot
}
Run Code Online (Sandbox Code Playgroud)

这样我就可以按如下方式调用该函数

scatterWithRegLine(df, "mpg", "wt", "loess", TRUE, FALSE, 1, c(0,5))
Run Code Online (Sandbox Code Playgroud)

r ggplot2

0
推荐指数
1
解决办法
1521
查看次数

使用 geom_line() 按正数或负数着色

抱歉,如果这是一个重复的问题,但我尝试过的其他答案并未产生我想要的情节。

我想根据该值是正值还是负值(我称之为“阶段”)对该图进行颜色编码。

当 geom_line() 达到 0 的上方或下方时,我希望它的颜色为“正”或“负” - 我认为以下方法可行,但似乎不起作用。有人能告诉我哪里出了问题吗?谢谢。

原剧情] 1

数据

structure(list(Date = c(1876, 1877, 1878, 1879, 1880, 1881), 
    value = c(4.95, -10.0416666666667, 2.95, 12.85, 7.8, -4.76666666666667
    ), phase = structure(c(3L, 1L, 3L, 3L, 3L, 1L), .Label = c("negative", 
    "neutral", "positive"), class = "factor")), row.names = c(NA, 
-6L), class = c("data.table", "data.frame"), .internal.selfref = <pointer: 0x7ffb06817ce0>)
Run Code Online (Sandbox Code Playgroud)

代码

## create a column to determine if the phase is negative, positive or neutral i.e. 0

dd_avg$phase<-factor(sign(dd_avg$value), (-1):1, c('negative', 'neutral', 'positive'))
dd_avg …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

0
推荐指数
1
解决办法
1073
查看次数

R ggplot图例显示矩形而不是直线

我正在尝试绘制某个平均值的正态分布密度。问题是图例显示矩形而不是线条。输出如下:

在此输入图像描述

如何解决这个问题?这是我的代码:

library(dplyr)
library(ggplot2)
library(tidyr)
n=100;kseq<-c(1.5,2,3,5,7)
df1<-matrix(0,nrow=n,ncol=length(kseq))
for(i in 1:length(kseq)){
  df1[,i]<-rnorm(n,kseq[i])
}
colnames(df1)<-paste("k=",kseq,sep="")#paste("v",1:length(kseq),sep="")
df1<-as.data.frame(df1)
df2<-df1 %>% pivot_longer(cols=1:5, names_to = "group",values_to = "value") 
df2<- df2 %>% mutate( groupname=case_when(
  group=="v1"~"k=1.5",
  group=="v2"~"k=2",
  group=="v3"~"k=3",
  group=="v4"~"k=5",
  group=="v5"~"k=7"))
ggplot(df2,aes(x=value, linetype=group)) + geom_density(lwd=1.05) +
  labs(x="",y="",main="jhfu")+ labs(linetype='') +  
  theme(legend.key.size = unit(1.5, 'cm'),legend.text =  element_text(size=15),
    legend.justification = c(1, 0))+
  scale_linetype_manual(labels = colnames(df1), values = c(4,1,5,2,3)) +
  theme_light()
Run Code Online (Sandbox Code Playgroud)

r ggplot2

0
推荐指数
1
解决办法
916
查看次数

如何将多个图合并到一张图中?

我需要一些帮助来将四个单独的图合并在一个页面上(单个图)。我使用相同的代码但使用不同的数据组绘制了四个不同的图。我需要在一页上绘制所有四个图。

library(ggpubr)
library(rstatix)
library(xlsx)
df<-read.xlsx("umar.xlsx", header = T, 1)
# Statistical test

######## Figure 1 ########
stat.test <- df %>%
  t_test(Moisture_content ~ substrate) %>%
  add_significance()
stat.test

# Box plots with p-values
bxp <- ggboxplot(df, x = "substrate", y = "Moisture_content", fill = "substrate", 
                 palette = c("#00AFBB", "#E7B800"), width = 0.35)



stat.test <- stat.test %>% add_xy_position(x = "substrate")
bxp + 
  stat_pvalue_manual(stat.test, label = "p = {p}") +
  scale_y_continuous(expand = expansion(mult = c(0.05, 0.1)))+
  theme(
    aspect.ratio = 3
  )


######## Figure 2 …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

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

在ggplot2中旋转标签注释

我正在尝试旋转 R 中 ggplot 上的注释,类似于此问题,但使用带有背景的标签几何图形。

geom = "text"使用与或geom_text一起使用geom = 'label'的代码geom_label会导致注释不旋转。

fake = data.frame(x=rnorm(100), y=rnorm(100))
ggplot(data = fake, aes(x = x, y = y)) + 
    geom_point() +
    geom_vline(xintercept = -1, linetype = 2, color = "red") +
#    annotate(geom = "text", x = -1, y = -1, label = "Helpful annotation", color = "red",
#             angle = 90)
    annotate(geom = "label", x = -1, y = -1, label = "Helpful annotation", color …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

0
推荐指数
1
解决办法
1398
查看次数

ggplot 中具有单独元素的水平堆叠条形图

我试图想出一种以特定方式可视化一些李克特量表数据的方法。我什至不知道如何伪造它的样子,所以我希望我的解释足够了。

我有以下(假)数据:

n 个问题,每个问题有 5 个答案(非常同意、同意、不同意、非常不同意、不知道)

我想沿着中心轴可视化数据(最好使用 ggplot),以便两个“同意”答案位于左侧,两个“不同意”答案位于右侧,然后位于一个单独的块上一侧,代表“不知道”的块。它应该大致如下所示:

Q1:  *****++++++++|------!!     ?????
Q2:     ****++++++|----!!!!!!   ???????
Q3:       **++++++|---!!!       ??????????
      *: strongly agree, +: agree, -: don't agree, !:strongly disagree, ?: don't know
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,这种表示方式允许比较同意和不同意的实际数量,而不会隐藏有多少“不知道”。我陷入困境的是如何为不知道的情况创建第二个元素。有任何想法吗?

以下是一些虚假数据:

structure(list(Q = structure(1:3, .Label = c("Q1", "Q2", "Q3"
), class = "factor"), SA = c(25, 18, 12), A = c(30, 25, 15), 
    DA = c(25, 20, 25), SDA = c(10, 18, 25), DK = c(10, 19, 23
    )), row.names = c(NA, -3L), class = "data.frame")
Run Code Online (Sandbox Code Playgroud)

r ggplot2

0
推荐指数
1
解决办法
122
查看次数

曲线下渐变填充区域

我想用光谱颜色填充曲线下的区域,得到这样的图。

在此输入图像描述

这就是我尝试过的

 ggplot(bq, aes(x=w.length, y=s.e.irrad)) +
  geom_segment(aes(xend=w.length, yend=0, colour=abs(w.length)^0.7*sign(w.length))) +
  geom_line() +
  scale_colour_gradient2(low=scales::muted("blue"), 
                         mid=scales::muted("green"), 
                         high=scales::muted("red"))
Run Code Online (Sandbox Code Playgroud)

得到这个

在此输入图像描述

还尝试使用 geom_area

ggplot(bq, aes(x = w.length, y = s.e.irrad))+
  geom_area(fill = "steelblue") #steelblue is for example
Run Code Online (Sandbox Code Playgroud)

但无法填充渐变

我的数据框的 x 为波长,y 为辐照度

r fill ggplot2

0
推荐指数
1
解决办法
784
查看次数

将 ggplot2 与 ks 包的 kde 图结合使用

我正在使用ks来计算和绘制二元核密度估计。它效果很好,但我想使用 ggplot 来绘制估计值。

我可以尝试创建一个自定义函数来为 ggplot 准备数据框和其他内容,但我感觉更有经验的 R 用户可以更轻松地做到这一点。

那么,我该怎么做呢?

以下是 ks::kde 的示例场景:

data <- cbind(rnorm(100), rnorm(100))
kd <- ks::kde(data)
plot(kd, display = "slice", col = viridis::viridis(20))
plot(kd, display = "image", col = viridis::viridis(20))
plot(kd, display = "persp", col.fun = viridis::viridis)
Run Code Online (Sandbox Code Playgroud)

上面的代码应该给你以下的图。如何使用 ggplot 来绘制这些图?

编辑:我需要使用ks按包计算的估计值。提供的本机函数ggplot2使用名为 的包MASS。所以这样不行。

切片图 图像图 透视图

r ggplot2 kernel-density

0
推荐指数
1
解决办法
827
查看次数

R 中的非线性回归,nls:奇异梯度

我想将我的数据拟合到已使用 Matlab 优化的特定函数中。

我收到以下错误:“警告消息:计算失败stat_smooth():奇异梯度”

请帮忙!这是我的 R 代码:

tibble
       x     y     SEM
 1     1 0.0342 0.00532
 2     3 0.0502 0.00639
 3     5 0.0700 0.0118 
 4    10 0.123  0.0269 
 5    20 0.154  0.0125 
 6    30 0.203  0.0190 
 7    40 0.257  0.0255 
 8    50 0.287  0.0266 
 9    60 0.345  0.0347 
10    90 0.442  0.0398 
11   120 0.569  0.0570 
12   180 0.726  0.0406 
13   240 0.824  0.0150 
14   360 0.868  0.00821
15  1440 0.890  0.0246 

tibble %>% 
  ggplot(aes(x, y)) +
  geom_point()+
  geom_errorbar(aes(ymin=y-SEM, …
Run Code Online (Sandbox Code Playgroud)

regression r nls ggplot2 ggplotly

0
推荐指数
1
解决办法
205
查看次数

ggplot2 geom_path 图非常“模糊”。我怎样才能解决这个问题?

我从 ggplot 中看到一些非常奇怪(且不受欢迎)的行为。我使用以下代码生成沿单个路径具有不同颜色段的绘图。

library(data.table)
library(ggplot2)

testData = fread("test_data.tsv")

ggplot(testData, aes(X, Y, color = Color, group = 1)) +
  geom_path(size = 1.5) + scale_color_identity()
Run Code Online (Sandbox Code Playgroud)

(“test_data.tsv”中的数据可以在此 Pastebin中找到。)

结果图如下所示: 模糊图

正如你所看到的,边缘非常模糊(或者模糊,或者锯齿状,或者无论你想怎么称呼它们),我似乎无法修复它们。我尝试过以更高的 dpi 或其他图形格式(例如 pdf)导出,但没有任何效果。

有趣的是,放大模糊部分似乎可以洞察正在发生的事情: 模糊变焦

每个点似乎都对齐以连接到其邻居,但实际的连接并不顺利。我认为这是使用“group = 1”参数来防止 ggplot 将所有类似颜色的区域连接在一起的产物。但是,正是出于这个原因,我无法更改该选项。

是否有我可以实施的解决此问题的方法,或者我此时是否遇到了 ggplot 的限制?

r blurry ggplot2

0
推荐指数
1
解决办法
853
查看次数

标签 统计

ggplot2 ×10

r ×10

blurry ×1

fill ×1

ggplotly ×1

kernel-density ×1

nls ×1

regression ×1