小编Tje*_*ebo的帖子

了解 ggplot2 中的色阶

有很多方法可以定义ggplot2. 加载后,ggplot2我计算以(或)22开头的函数以及以 开头的相同数字。能否简单说明一下下面这些函数的用途?特别是我对某些功能的差异以及何时使用它们感到困惑。scale_color_*scale_colour_*scale_fill_*

  • 缩放_*_binned()
  • 规模_*_brewer()
  • 缩放_*_连续()
  • 比例_*_日期()
  • 比例_*_日期时间()
  • 尺度_*_离散()
  • 规模_*_distiller()
  • 规模_*_发酵机()
  • 缩放_*_梯度()
  • 缩放_*_gradient2()
  • 缩放_*_gradientn()
  • 比例_*_灰色()
  • 比例_*_色调()
  • 规模_*_身份()
  • 缩放_*_手动()
  • 比例_*_序数()
  • 缩放_*_steps()
  • 缩放_*_steps2()
  • 缩放_*_stepsn()
  • 缩放_*_viridis_b()
  • 缩放_*_viridis_c()
  • 缩放_*_viridis_d()

我尝试过的

我尝试在网上进行一些研究,但读得越多,我就越感到困惑。删除一些随机示例:“连续填充比例的默认比例是scale_fill_continuous(),而默认比例为scale_fill_gradient()。我不明白这两个功能有什么区别。再次强调,这只是一个例子。scale_color_binned()对于和来说也是如此,scale_color_discrete()我无法说出其中的区别。scale_color_date()在这种情况下,scale_color_datetime()destription 会说“scale_*_gradient创建一个两种颜色渐变(低-高),scale_*_gradient2创建一个发散的颜色渐变(低-中-高),scale_*_gradientn创建一个 n 颜色渐变。” 很高兴知道,但这与scale_color_date()和有何关系scale_color_datetime()?在网络上寻找这些功能也没有给我提供非常丰富的信息来源。关于这个主题的阅读也会变得混乱,因为不同的软件包中有大量的调色板,这些调色板是连续的/发散的/定性的,而且可以以不同的方式设置相同的颜色,即通过颜色名称、RGB、数字、十六进制代码或调色板名称。在某种程度上,这与有关功能的问题没有直接关系2*22,但在某些情况下,这是因为提供“错误”的调色板会导致错误(例如 error "Continuous value supplied to discrete scale)。

为什么我问这个

I need to …

r ggplot2

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

如何绘制不超出值的圆端线段

令我有些惊讶的是,这从未引起我的注意(我想直到今天我才用圆线末端画了很多东西)。

当绘制带有圆线末端的线段时,这“当然”是作为附加的 grob 元素添加的,但它通过超出给定值来向图形表示添加“值”。我怎样才能改变这个?

我认为需要重新计算原始值,以便在添加圆端时达到正确的值,但这需要在绘制时(即在 grob 函数内)进行此计算。我对杂种很不擅长。如有帮助,将不胜感激。

library(ggplot2)
df <- data.frame(x = 0, xend = 1, y = 0, yend = 0)
ggplot(df, aes(x, y)) +
  geom_vline(xintercept = c(0, 1), lty = 2) +
  geom_segment(aes(xend = xend, yend = yend), 
               linewidth = 6, alpha = .5, 
               lineend = "round")  +
  labs(title =  "NOT an accurate representation of the data",
       caption = "The line extends beyond the given values")
Run Code Online (Sandbox Code Playgroud)

创建于 2023 年 11 月 16 日,使用reprex v2.0.2

r ggplot2 grob

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

当绘制使用ggplot中数据子集的图层时,因子级别的原始顺序在图例中会发生变化

我试图控制ggplot2R 中的图中的图例中的项目的顺序.我查找了一些其他类似的问题,并发现了关于改变我正在绘制的因子变量的级别的顺序.我正在绘制4个月,12月,1月,7月和6月的数据.

如果我只是为所有月份执行一个绘图命令,它按预期工作,图例中按照因子级别的顺序排列的月份.但是,我需要dodge为夏季(6月和7月)和冬季(12月和1月)数据提供不同的值.我用两个geom_pointrange命令做到这一点.当我将其分为两步时,图例的顺序将恢复为按字母顺序排列.您可以通过评论"情节夏天"或"情节冬天"命令来演示.

我可以更改什么来保持图例中的因子级别顺序?

请忽略奇怪的测试数据 - 真实数据在此绘图格式中看起来很好.

#testdata
hour <- rep(seq(from=1,to=24,by=1),4)
avg_hou <- sample(seq(0,0.5,0.001),96,replace=TRUE)
lower_ci <- avg_hou - sample(seq(0,0.05,0.001),96,replace=TRUE)
upper_ci <- avg_hou + sample(seq(0,0.05,0.001),96,replace=TRUE)
Month <- c(rep("December",24), rep("January",24), rep("June",24), rep("July",24))

testdata <- data.frame(Month,hour,avg_hou,lower_ci,upper_ci)
testdata$Month <- factor(alldata$Month,levels=c("June", "July", "December","January"))

#basic plot setup
plotx <- ggplot(testdata, aes(x = hour, y = avg_hou, ymin = lower_ci, ymax = upper_ci, color = Month, shape = Month))
plotx <- plotx + scale_color_manual(values = c("June" = "#FDB863", "July" = "#E66101", …
Run Code Online (Sandbox Code Playgroud)

plot r ggplot2

11
推荐指数
2
解决办法
850
查看次数

如何制作具有多个几何的自定义ggplot2 geom

我一直在阅读关于扩展ggplot2小插图,但我有点担心如何制作一个可以为绘图添加多个几何的单个geom.ggplot2 geoms中已存在多个几何,例如,我们有geom_contour(多个路径)和geom_boxplot(多个路径和点)之类的东西.但我不太清楚如何将它们扩展到新的geoms中.

假设我试图geom_manythings通过计算单个数据集来绘制两个多边形和一个点.对于所有点,一个多边形将是凸包,第二个多边形将是用于点的子集的凸包,并且单个点将表示数据的中心.我想通过调用一个geom而不是三个单独的调用来显示所有这些,如我们在这里看到的:

# example data set
set.seed(9)
n <- 1000
x <- data.frame(x = rnorm(n),
                y = rnorm(n))

# computations for the geometries 
# chull for all the points
hull <-  x[chull(x),]
# chull for all a subset of the points
subset_of_x <- x[x$x > 0 & x$y > 0 , ]
hull_of_subset <- subset_of_x[chull(subset_of_x), ]
# a point in the centre of the data
centre_point <- …
Run Code Online (Sandbox Code Playgroud)

plot r ggplot2 ggproto

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

正则表达式,包括和排除R中的某些字符串

我正在尝试使用R来解析许多条目.我对我想要的条目有两个要求.我想要包含该单词apple但不包含该单词的所有条目orange.

例如:

  1. 我喜欢苹果
  2. 我真的很喜欢苹果
  3. 我喜欢苹果和橘子

我希望得到第1和第2条.

我怎么能用R来做这件事?

谢谢.

regex r

9
推荐指数
3
解决办法
8111
查看次数

按组进行条件 NA 填充

编辑
这个问题最初是问的data.table。任何包的解决方案都会很有趣。


我对一个更普遍的问题的特定变体有点困惑。我有与 data.table 一起使用的面板数据,我想使用 data.table 的功能分组来填充一些缺失值。不幸的是,它们不是数字,所以我不能简单地进行插值,但它们只能根据条件进行填充。是否可以在 data.tables 中执行一种条件 na.locf?

本质上,如果在 NA 之后下一个观察是之前的观察,我只想填充 NA,尽管更普遍的问题是如何有条件地填充 NA。

例如,在下面的数据中,我想按每个 id 组填充相关的 id 变量。因此id==1year==2003将填写为ABC123因为它是 NA 之前和之后的值,但对于相同的 id 则不是 2000。id== 2不会更改,因为下一个值与 NA 之前的值不同。id==3将填写 2003 年和 2004 年。

mydf <- structure(list(id = c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L), year = c(2000L, 2001L, 2002L, 2003L, 2004L, 2005L, 2000L, 2001L, 2002L, 2003L, 2004L, 2005L, …
Run Code Online (Sandbox Code Playgroud)

r plyr na dplyr data.table

9
推荐指数
3
解决办法
1710
查看次数

是否可以在数据之前先绘制轴线?

这是我之前的问题的后续问题,我正在寻找一种解决方案,先绘制轴,然后绘制数据。答案适用于该特定问题和示例,但它提出了一个更一般的问题,即如何更改底层 grobs 的绘图顺序。首先是轴,然后是数据。

非常类似于面板网格 grob 可以绘制在顶部或不绘制的方式。

面板网格和轴格布显然是不同的——轴更多地作为引导对象而不是“简单”格布。(轴是用 绘制的ggplot2:::draw_axis(),而面板网格是作为ggplot2:::Layout对象的一部分构建的)。

我想这就是为什么在顶部绘制轴的原因,我想知道是否可以更改绘制顺序。

# An example to play with 

library(ggplot2)
df <- data.frame(var = "", val = 0)

ggplot(df) + 
  geom_point(aes(val, var), color = "red", size = 10) +
  scale_x_continuous(
    expand = c(0, 0),
    limits = c(0,1)
  ) +
  coord_cartesian(clip = "off") +
  theme_classic() 
Run Code Online (Sandbox Code Playgroud)

PS我不会接受甚至不赞成创建假轴的答案,因为这不是我正在寻找或试图理解的。

r ggplot2 grob

9
推荐指数
2
解决办法
292
查看次数

如何在 geom_smooth 之后而不是在 geom_line 之后显示直接标签?

我正在使用直接标签来注释我的情节。正如你在这张图片中看到的,标签在 geom_line 之后,但我想要在 geom_smooth 之后。这是否受直接标签支持?或任何其他想法如何实现这一目标?提前致谢!

在此处输入图片说明

这是我的代码:

library(ggplot2)
library(directlabels)

set.seed(124234345)

# Generate data
df.2 <- data.frame("n_gram" = c("word1"),
                   "year" = rep(100:199),
                   "match_count" = runif(100 ,min = 1000 , max = 2000))

df.2 <- rbind(df.2, data.frame("n_gram" = c("word2"),
                      "year" = rep(100:199),
                      "match_count" = runif(100 ,min = 1000 , max = 2000)) )

# plot
ggplot(df.2, aes(year, match_count, group=n_gram, color=n_gram)) +
  geom_line(alpha = I(7/10), color="grey", show_guide=F) +
  stat_smooth(size=2, span=0.3, se=F, show_guide=F) +
  geom_dl(aes(label=n_gram), method = "last.bumpup", show_guide=F) +
  xlim(c(100,220))
Run Code Online (Sandbox Code Playgroud)

r ggplot2 direct-labels

8
推荐指数
2
解决办法
2860
查看次数

R中的线密度热图

问题描述
我有数千行(~4000)要绘制。然而,绘制所有线条是不可行的geom_line(),仅使用例如alpha=0.1来说明哪里有高密度的线,哪里没有。我在 Python 中遇到了类似的东西,尤其是答案的第二个图看起来非常好,但是如果可以在ggplot2. 因此是这样的: 在此处输入图片说明

一个示例数据集
用一组显示模式来证明这一点会更有意义,但现在我只是生成随机正弦曲线:

set.seed(1)
gen.dat <- function(key) {
    c <- sample(seq(0.1,1, by = 0.1), 1)
    time <- seq(c*pi,length.out=100)
    val <- sin(time)
    time = 1:100
    data.frame(time,val,key)
}
dat <- lapply(seq(1,10000), gen.dat) %>% bind_rows()
Run Code Online (Sandbox Code Playgroud)

尝试过热图
我尝试了一个像这里回答的热图,但是这个热图不会考虑整个轴上点的连接(比如在一条线上),而是显示每个时间点的“热量” 。

问题
我们如何在 R 中使用ggplot2类似于第一张图所示的线绘制热图?

plot r heatmap ggplot2

8
推荐指数
2
解决办法
798
查看次数

改进地图/多边形标签的定位

这是改进居中县名称 ggplot 和地图以及地图上 ggplot 居中名称的扩展。这不仅仅是一个理论问题,我在回答How merge certain states Together by group with one label in ggplot2 in R? 时遇到了这种特殊情况。。在这里,我发现有一个L形的“网格”通向多边形外部的中点位置。另请参阅 Henrik 的链接线程Calculate Centroid Within / INSIDE a SpatialPolygon。。

我想知道是否有办法强制标签进入多边形,以获得“更直观”的中点。“直观地”可能意味着“多边形内距离任何边界最远的点”相关线程的答案建议使用一个函数来计算它,但这个函数似乎没有给出与rgeos::gCentroid我的示例中不同的结果)。

任何建议都应该是完全自动化的,理想情况下适用于任何(ir-)正多边形,并且也独立于坐标投影(即坐标纵横比不重要) 校正:理想情况下它应该取决于坐标投影,因为这可能会将文本移动到边框的尴尬位置。因此,理想的解决方案可能应该在绘制时计算标签位置。

非常相关的是https://gis.stackexchange.com/questions/29278/finding-point-in-country-furthest-from-boundaryhttps://mathoverflow.net/questions/161494/get-a-point- in-polygon-maximize-the-distance-from-borders,但我不知道如何在 R / grid / ggplot2 中实现这一点。

suppressMessages({library(ggh4x)
library(sf)
library(dplyr)
library(patchwork)
})

poly_foo <- data.frame(x = c(0:1, rep(2,4), rep(1.5,3), 0), y = c(rep(0,3), 1:3, 3:1, 1))

p <- …
Run Code Online (Sandbox Code Playgroud)

r polygon ggplot2 r-sp r-sf

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

标签 统计

r ×10

ggplot2 ×8

plot ×3

grob ×2

data.table ×1

direct-labels ×1

dplyr ×1

ggproto ×1

heatmap ×1

na ×1

plyr ×1

polygon ×1

r-sf ×1

r-sp ×1

regex ×1