我想通过使用ggplot2重现下面的情节.我可以靠近,但不能删除顶部和右边界.下面我介绍几次使用ggplot2的尝试,包括在Stackoverflow上或通过Stackoverflow找到的一些建议.不幸的是,我无法将这些建议付诸实践.
我希望有人能够纠正下面的一个或多个代码片段.
谢谢你的任何建议.
# desired plot
a <- seq(1,20)
b <- a^0.25
plot(a,b, bty = "l")
library(ggplot2)
df <- as.data.frame(cbind(a,b))
# 1. ggplot2 default
ggplot(df, aes(x = a, y = b)) + geom_point()
# 2. removes background color
ggplot(df, aes(x = a, y = b)) + geom_point() + opts(panel.background = theme_rect(fill='white', colour='black'))
# 3. also removes gridlines
none <- theme_blank()
ggplot(df, aes(x = a, y = b)) + geom_point() + opts(panel.background = theme_rect(fill='white', colour='black')) + opts(panel.grid.major = none, panel.grid.minor = …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种自动移动 y 轴刻度标签的方法,以便它们在实际绘图区域内左对齐。我喜欢 ggplot 中主题组件的总体灵活性,但在尝试找到通用方法来实现此目的时遇到了困难。
我知道给出负右边距 (*gag*)axis.text.y的组合hjust=0可以实现此效果,但必须手动设置负边距以匹配最长 y 轴刻度标签的宽度。
作为示例,请考虑以下代码:
library(ggplot2)
set.seed(0)
dat <- data.frame(x = 1:100, y = (1:100) + runif(100, -10, 10))
p1 <- ggplot(dat, aes(x, y)) +
geom_line() +
scale_y_continuous("", breaks = c(0, 30, 60, 90),
labels = c(0, 30, 60, "90 units of something")) +
theme(axis.text.y = element_text(hjust = 0,
margin = margin(0, -3.1, 0, 0, 'cm')))
Run Code Online (Sandbox Code Playgroud)
我认为它优雅地将 y 轴标签(例如"units of something")合并到图的主体中,但为了实现它,-3.1必须手动找到最后一行中的 (通过反复试验),这雪上加霜:我不仅使用负边距将文本拉到不想要的地方——我还添加了一些神秘的、脆弱的、硬编码的魔法数字。
有谁知道我可以在哪里找到一个更通用和优雅的解决方案来解决这个问题?
我希望能够以编程方式为我的情节的最顶部分配一条绿线。
下面我在一个例子中展示了我想要什么,除了线在最底部,而不是顶部。理想情况下,我会theme以类似的方式完成这项工作。
我试图自己完成顶线,panel.border但它需要element_rect一个参数,这意味着情节的另一边也将获得绿线。
虽然最好使用theme,但我愿意使用geom_hline或其他任何东西。当我尝试实施解决方案时geom_hline遇到了麻烦,无法确定 ggplot 计算的 y 轴的最大值,以便将线干净地放在同一位置,而不管从绘图到绘图的比例如何变化。使用我的真实数据,y 轴的刻度变化很大,并且从绘图到绘图具有不同的测量单位。
library(tidyverse)
data(mtcars)
mtcars %>%
ggplot(aes(x= mpg, y= disp)) +
geom_point() +
theme(axis.line.x= element_line("green", size= 2))
Run Code Online (Sandbox Code Playgroud)