以下代码会导致图例中出现不需要的交叉效应。
ggplot() +
geom_vline(aes(xintercept=1,colour="vertical"), show.legend = NA) +
geom_hline(aes(yintercept=1,colour="horizontal"), show.legend = NA)
Run Code Online (Sandbox Code Playgroud)
我读了几篇文章,说添加show.legend = NA可以使这种效果消失,但这对我来说不起作用。
编辑: 为避免混淆,我不希望传说消失!我只希望图例中的“十字架”消失,所以它应该显示如下项目:
和
我试图扩展我的 ggplot 图中的 geom_vline 线,以超出绘图空间并进入轴区域。这样做的目的是让这些线分隔轴标签,以便它可以与旁边的另一个图对齐(见下文)。
一些简短的示例代码(我有更多的行,因此需要水平线来保持直线):
library(ggplot2)
library(cowplot)
library(dplyr)
#play data set
cars.data <- mtcars %>%
mutate(car_name = rownames(mtcars)) %>%
slice(1:6)
#I would like vlines to be extend in this plot
p1 <- ggplot(cars.data, aes(x = car_name, y = hp)) +
geom_point() +
scale_x_discrete(position = "top") +
coord_flip() +
geom_vline(aes(xintercept = seq(1.5, 6.5, 1)), color = "gray60") +
xlab("")
p2 <- ggplot(cars.data, aes(y = car_name, x = 1)) +
geom_text(aes(label = disp)) +
xlab("disp") +
geom_hline(aes(yintercept = seq(1.5, 6.5, 1)), …Run Code Online (Sandbox Code Playgroud) 我用一条线连接点绘制了一个图。在此图中,我想从 x 轴上的一点到与绘图线的交点绘制一条垂直线。在交点处,我想绘制一条到 Y 轴的水平线。我搜索了几个网站、论坛和教程,但仍然做不到。有什么帮助吗?
library(ggplot2)
X <- 1:5
Y <- c(2, 6, 4, 7, 12)
DF <- data.frame(X, Y)
ggplot(data = DF,
aes(x = X,
y = Y)) +
geom_point() +
geom_line() +
geom_vline(xintercept = 4.5,
linetype = 2)
Run Code Online (Sandbox Code Playgroud)
到目前为止的结果:
期望结果的示例:
我正在尝试制作带有“时间标记”的图形。这些时间标记是某些日期的垂直线。时间数据是POSIXct格式。我想使用Plotly的出色交互界面,并在其中使用ggplot对象。
问题是在使用ggplotly()之后,这些“时间标记”没有显示出来。我已经尝试过了,plotly::add_segments()但是没有用。这是两个可复制的示例:
1.使用非POSIXct数据可以正常工作
Run Code Online (Sandbox Code Playgroud)# dummy dataset df2 = data.frame(id = 1:10, measure = runif(10, 0, 20)) events2 = data.frame(number = c(2,3,8)) # ggplot graph p2 = ggplot() + geom_line(data = df2, aes(x = id, y = measure)) + geom_vline(data = events2, aes(xintercept = events2$number), color = "red") p2 # plotly graph that displays the geom_vline properly ggplotly(p2)
2.使用POSIXct时,数据无法显示正确的结果
Run Code Online (Sandbox Code Playgroud)# dummy dataset df = data.frame(date = seq(as.POSIXct("2017-07-01", tz = "UTC", format = "%Y-%m-%d"), as.POSIXct("2018-04-15", tz = "UTC", format = …
首先,让我们创建一些假数据:
d <- c("2019-01-01", "2019-01-02", "2019-01-03", "2019-01-04", "2019-01-03", "2019-04-06", "2019-04-03", "2019-05-07", "2019-05-03", "2019-05-03", "2019-05-03", "2019-05-03", "2019-06-03", "2019-06-03", "2019-06-03", "2019-06-03", "2019-06-03", "2019-06-03", "2019-06-03", "2019-07-03", "2019-07-03", "2019-07-04", "2019-08-03", "2019-09-05", "2019-09-03", "2019-09-03", "2019-09-06", "2019-09-08", "2019-10-03", "2019-11-03", "2019-11-03", "2019-11-03", "2019-11-03", "2019-11-03", "2019-11-03", "2019-12-03", "2019-12-03")
df <- data.frame(dates=as.Date(d))
Run Code Online (Sandbox Code Playgroud)
现在,我创建一个时间序列图:
# aggregate data
df_plot <- df %>% mutate(month = lubridate::floor_date(dates, "month")) %>%
group_by(month) %>% summarise(count = n())
# plot data
ggplot(aes(x = month, y = count), data = df_plot) + geom_line() +
scale_x_date() +
geom_vline(xintercept = …Run Code Online (Sandbox Code Playgroud) geom_hline()我使用和创建了一个散点图geom_vline(),该图很好,但图例条目不是我想要的显示方式。图例中的(vline恢复)和hline(阈值)是相互交叉的,令人困惑。我希望恢复图例条目为橙色垂直线,阈值图例条目为水平黑线。
我尝试了其他帖子中建议的几件事,但guide_legend(override.aes())要么show.legend = F更改了上面“类型”部分的图例条目(它删除了行并保留彩色圆圈),要么只是删除了其中一行的图例条目。
这是我当前的代码:
\nggplot(data = tst_formule[tst_formule$River != "Roya",], aes(x=Year, y = BRI_adi_moy_transect, shape = River, col = Type)) + \n geom_point(size = 3) + \n geom_errorbar(aes(ymin = BRI_adi_moy_transect - SD_transect, ymax = BRI_adi_moy_transect + SD_transect), width = 0.4) + \n scale_shape_manual(values = c(15, 16, 17)) +\n scale_colour_manual(values = c("chocolate1", "darkcyan")) + \n geom_vline(aes(xintercept = Restauration_year, linetype = "Restoration"), colour = "chocolate1") + \n …Run Code Online (Sandbox Code Playgroud) 我想在我的情节上绘制几条垂直线,并为每个相应的 vline 绘制一个图例。
阅读这篇文章后,这是我实现的:
set.seed(99)
df.size <- 1e6
my.df <- data.frame(dist = rnorm(df.size, mean = 0, sd = 2))
library(ggplot2)
ggplot(my.df, aes(x=dist)) + geom_histogram(binwidth = 0.5)
vline1.threshold <- mean(my.df$dist)
vline2.threshold <- mean(my.df$dist) + 3*sd(my.df$dist)
Run Code Online (Sandbox Code Playgroud)
现在的情节:
g <- ggplot(my.df, aes(x = dist)) +
geom_histogram(binwidth = 0.5) +
geom_vline(aes(color = "vline1", xintercept = vline1.threshold)) +
geom_vline(aes(color = "vline2", xintercept = vline2.threshold)) +
scale_color_manual("Threshold", values = c(vline1 = "red", vline2 = "blue"), labels = c("Mean", "Mean + 3*SD"))
system.time(print(g))
Run Code Online (Sandbox Code Playgroud)
这很有效:
但它非常慢: …
x 轴和 y 轴根据 ggplot 设置的特定间隔进行标记。
如果将水平线或垂直线添加到图中,目标是在该线的精确值处标记 x 或 y 轴。
如何才能做到这一点?