标签: aesthetics

修改ggplot函数外的aes列表

这是我在论坛中关于R的第一个问题,如果我在制定问题或指定标题时犯了错误,请提前抱歉.

关键是对于ggplot的特定任务,我在ggplot函数之外定义美学,然后将其作为参数提供.

>mytmpaes<-aes(x=Sample,y=ddCt.lin,ymax=ddCt.lin+ddCt.lin.sd,ymin=ddCt.linddCt.lin.sd,fill=factor(endog))
>my.ggplot(x,mytmpaes)
Run Code Online (Sandbox Code Playgroud)

但有时我只想修改mytmpaes列表中的一些对象,而不是使用aes()定义所有这些对象.但是,我真的不知道如何处理这个特殊列表.aes列表如下所示:

>mytmpaes
List of 5
$ x    : symbol Sample
$ y    : symbol ddCt.lin
$ ymax : language ddCt.lin + ddCt.lin.sd
$ ymin : language ddCt.lin - ddCt.lin.sd
$ fill : language factor(Rep)
Run Code Online (Sandbox Code Playgroud)

我想出了如何修改其中一些像这样:

 > mytmpaes$x<-as.symbol('Names')
 > mytmpaes$fill<-call('factor',quote(target))
 > mytmpaes
 List of 5
  $ x   : symbol Names
  $ y   : symbol ddCt.lin
  $ ymax: language ddCt.lin + ddCt.lin.sd
  $ ymin: language ddCt.lin - ddCt.lin.sd
  $ fill: language factor(endog)
Run Code Online (Sandbox Code Playgroud)

但是,我找不到用类似表达式修改ymax或ymin的方法.例如,我想将ymax更改为'ddCt.log2 - ddCt.log2.sd'.

有人可以给我一些建议吗?另外,有没有更正确的方法来修改aes列表?

谢谢,

亚历杭德罗

r ggplot2 aesthetics

3
推荐指数
1
解决办法
1169
查看次数

如何在 ggplots 中维护配色方案,同时删除每个图中未使用的级别?

我想比较一个图中我的数据的一些子组和另一个图中的一些其他子组。如果我将所有子组都绘制成一个图,这个数字是压倒性的,每个单独的比较都变得困难。我认为如果给定的子组在所有图中使用相同的颜色,对读者来说会更有意义。

这是我尝试过的两件事,几乎可以工作,但都不太奏效。他们离我最接近 MWE 了!

错误,因为所有三个级别都显示在图例中

library(tidyverse)

# compare first and second species
ggplot(data = iris %>% filter(Species != 'virginica'),
       mapping = aes(x = Sepal.Length,
                     y = Sepal.Width,
                     color = Species)) +
  geom_point() +
  scale_color_discrete(drop = FALSE)


# compare second and third species
ggplot(data = iris %>% filter(Species != 'setosa'),
       mapping = aes(x = Sepal.Length,
                     y = Sepal.Width,
                     color = Species)) +
  geom_point() +
  scale_color_discrete(drop = FALSE)
Run Code Online (Sandbox Code Playgroud)

请注意,未绘制的级别仍然出现在图例中(与 drop = FALSE 的想法一致)。

错误,因为第二个图没有保持第一个图建立的物种颜色映射

# compare first and second species
ggplot(data = …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 aesthetics

3
推荐指数
1
解决办法
2795
查看次数

将图例添加到具有不同类型美学的ggplot直方图中

我想在其中一个地块上添加图例,但是我有不同的审美观,并且我从未创建过图例,因此我很难确定如何构建图例。

我的审美观之一是填充代码,我将其手动添加为矢量。另一种美学是我在geom_vline中添加的垂直线。

从下面的图形中,我想添加到图例中的三个特征:1)颜色为深蓝色的条,2)颜色为浅蓝色的条,以及3)垂直线。

有人对我有建议如何有效地编码吗?

#df
df <- data.frame(Time_Diff <- runif(1000, 0, 200))


# Show median, IQR range and outliers
colors <- c(rep("blue",3), rep("paleturquoise2",38))
bp_overall <- ggplot(data = df, aes(Time_Diff)) 
bp_overall + 
  geom_histogram(binwidth = 5, fill = colors) + #create histogram
  ggtitle("Time Difference")  +
  xlab("Time in Days") +
  ylab("Amount") +
  geom_vline(xintercept = 3, linetype = "twodash", size = 1,      colour= "darkblue") + #show median
  scale_x_continuous(breaks = seq(0, 202, 10)) +
  theme_light() +
  theme(panel.grid.minor = element_blank(),
    panel.border = element_blank(), #remove all border …
Run Code Online (Sandbox Code Playgroud)

r legend histogram ggplot2 aesthetics

3
推荐指数
1
解决办法
1500
查看次数

geom_rect 和 ggplot2 错误:美学必须是长度 1 或与数据相同 (2)

我正在尝试执行类似/sf/answers/2075458451/ 的操作,但出现错误

错误:Aesthetics 必须为长度 1 或与数据 (2) 相同:xmin, xmax, ymin, ymax, x, y

“(2)”是什么意思?

涉及哪些“美学”?我已经aesggplotaesgeom_rect,但我不知道如何解决这些问题的想法,我很害怕我永远不会掌握ggplot...

days<-rep(Sys.Date(),100)+seq(1,100)
v<-sin(as.numeric(days))
df<-data.frame(days=days,v=v)

shade <- data.frame(x1=c(as.Date('2017-10-15'),as.Date('2017-11-11')), 
                   x2=c(as.Date('2017-10-20'),as.Date('2017-11-13')), 
                   y1=c(-Inf,-Inf), y2=c(Inf,Inf))

library(ggplot2)
plot(ggplot(df,aes(x=days,y=v))
     +geom_line()
     +geom_rect(data=shade, 
               mapping=aes(xmin=x1, xmax=x2, ymin=y1, ymax=y2), color='grey', alpha=0.2)
     +geom_point())
Run Code Online (Sandbox Code Playgroud)

r ggplot2 aesthetics

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

ggplot aes fill 没有明显原因无法工作

我已经制作了 ggplot 图形数百次(如果不是数千次),并且大约 99% 的时间使用 aes 将填充设置为基于 df 中的变量。由于某种原因,填充颜色不起作用(点每次都是黑色的),我不明白为什么,代码中没有任何明确的内容。我已经尝试了几乎所有我能想到的对代码的调整或调整,一次删除一个行或一个部分来测试哪个部分出错了。即使我只运行前两行,除了黑色之外我没有得到任何填充颜色。有什么想法吗?

ggplot(mean_score_by_type, aes(x = Inference, y = Direct, fill=as.factor(Age_Group))) +
  geom_point(alpha=0.7, size=4, stroke=1, position=position_jitter(width=0.05, height=0.05)) +
  scale_fill_discrete(name = "Age (Years)") +
  theme(plot.title = element_text(hjust = 0.5)) +
  scale_y_continuous(breaks=seq(0,1,0.25), limits=c(0.25,1.05)) +
  labs(y="Direct", x="Inference", title="Proportion of Correct Responses") +
  geom_vline(xintercept=.56, color="red", linetype=2) + 
  geom_hline(yintercept=.56, color="blue", linetype=2) +
  facet_wrap(~Group)
Run Code Online (Sandbox Code Playgroud)

几行数据:

 Participant Age_Group Control-ID Control-MC Direct Inference   Group
        1         6      1.000      1.000     1.00      0.75 Under 7
        2         6      1.000      1.000     1.00      0.00 Under 7
        3         4 …
Run Code Online (Sandbox Code Playgroud)

r fill ggplot2 aesthetics

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

geom_density 在提供的美学方面是盲目的吗?

我不得不承认我已经有一段时间没有使用 ggplot 了,但这似乎有点傻。我在尝试制作密度图时遗漏了一些基本的东西,或者 ggplot2 (v3.3.2) 中存在错误

test <- data.frame(Time=rnorm(100),Age=rnorm(100))
ggplot(test,aes(y=Time,x=Age)) + 
  geom_density(aes(y=Time,x=Age))
Run Code Online (Sandbox Code Playgroud)

产生

ggplot(测试,aes(y=时间,x=年龄))+

  • geom_density(aes(y=Time,x=Age)) 错误:geom_density 需要以下缺失的美学:y

怎么会缺少“y”美学?

r ggplot2 aesthetics

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

标签 统计

aesthetics ×6

ggplot2 ×6

r ×6

fill ×1

histogram ×1

legend ×1