R 如何反转绘图上的y轴

R 如何反转绘图上的y轴,r,plot,R,Plot,我想知道如何在R中绘制一个图,其中y轴倒置,这样绘制的数据显示在笛卡尔平面的第四象限()中,而不是第一(I)象限 作为参考,我试图绘制的图与以下()非常相似: 我在网上发现了许多关于在y轴上反转编号的问题,但这些问题仍然在第一个象限中绘制数据。有人能建议我如何制作一个类似于上面所示的情节吗?下面是@timriffe和@joran的评论,只是为了提供一个已解决的答案 使用该功能可从以下位置获取次要日志标记: 添加花式原木轴并将刻度标签向右上旋转(谢谢@joran!): 将x轴添加到顶部: axi

我想知道如何在R中绘制一个图,其中y轴倒置,这样绘制的数据显示在笛卡尔平面的第四象限()中,而不是第一(I)象限

作为参考,我试图绘制的图与以下()非常相似:


我在网上发现了许多关于在y轴上反转编号的问题,但这些问题仍然在第一个象限中绘制数据。有人能建议我如何制作一个类似于上面所示的情节吗?

下面是@timriffe和@joran的评论,只是为了提供一个已解决的答案

使用该功能可从以下位置获取次要日志标记:

添加花式原木轴并将刻度标签向右上旋转(谢谢@joran!):

将x轴添加到顶部:

axis(3)
添加x轴标签(感谢提示@WojciechSobala)

并在该行的末尾添加注释

text(max(x), min(log10(y)), "Example", pos = 1)
结果如下:


回答标题中的问题,反转轴的最佳/最简单方法是翻转
限制
变量:

> plot(1:10, xlim=c(1,10));

这样做意味着您不需要处理与图像坐标不同的轴

这可以与'xaxt=“n”'参数和附加的
命令结合使用,以将轴放置在另一侧:

> plot(1:10, ylim=c(10,1), xaxt="n"); axis(3);

现在,在
ggplot2

示例

library(ggplot2)
library(scales)

set.seed(99)
Date <- seq(from = as.Date("2017-12-01"), to = as.Date("2017-12-15"),
             by = "days")
Flux <- runif(length(Date), 1, 10000)
Flux_df <- data.frame(Date, Flux)

p1 <- ggplot(Flux_df, aes(Date, Flux)) +
  geom_col() +
  xlab("") +
  scale_x_date(position = "top", breaks = pretty_breaks(), expand = c(0, 0)) +
  scale_y_reverse(expand = expand_scale(mult = c(0.2, 0))) +
  theme_bw(base_size = 16) +
  theme(panel.border = element_blank(),
        panel.grid.major.x = element_blank(),
        panel.grid.minor = element_blank(),
        axis.line = element_line()) +
  theme(legend.position = "none")
p1

在绘图调用中,指定
axes=FALSE
,然后使用
axis()
几次,指定
side
参数以获得所需的轴。我将重复tim的评论:看起来你并不是真的在“反转”任何东西。您只是在顶部而不是底部绘制x轴。+1做得很好。你不必上传另一张图片来证明这一点,但既然OP肯定会问,传递
las=1
minor.ticks.axis
是否将y轴标签旋转为水平?使用多行文字,你可以添加x轴标签以获得所需的结果。@WojciechSobala,谢谢你的提示,我已经添加了这一点,在这行的末尾有一个注释,与OP的示例更为相似
mtext("x", side = 3, line = 2)
text(max(x), min(log10(y)), "Example", pos = 1)
> plot(1:10, xlim=c(1,10));
> plot(1:10, xlim=c(10,1));
> plot(1:10, ylim=c(10,1));
> plot(1:10, ylim=c(10,1), xaxt="n"); axis(3);
library(ggplot2)
library(scales)

set.seed(99)
Date <- seq(from = as.Date("2017-12-01"), to = as.Date("2017-12-15"),
             by = "days")
Flux <- runif(length(Date), 1, 10000)
Flux_df <- data.frame(Date, Flux)

p1 <- ggplot(Flux_df, aes(Date, Flux)) +
  geom_col() +
  xlab("") +
  scale_x_date(position = "top", breaks = pretty_breaks(), expand = c(0, 0)) +
  scale_y_reverse(expand = expand_scale(mult = c(0.2, 0))) +
  theme_bw(base_size = 16) +
  theme(panel.border = element_blank(),
        panel.grid.major.x = element_blank(),
        panel.grid.minor = element_blank(),
        axis.line = element_line()) +
  theme(legend.position = "none")
p1
reverselog_trans <- function(base = exp(1)) { 
  trans <- function(x) -log(x, base) 
  inv <- function(x) base^(-x) 
  scales::trans_new(paste0("reverselog-", format(base)), trans, inv, 
                    scales::log_breaks(base = base), domain = c(1e-100, Inf)) 
}


p1 + scale_y_continuous(trans = reverselog_trans(10),
                        breaks = scales::trans_breaks("log10", function(x) 10^x),
                        labels = scales::trans_format("log10", scales::math_format(10^.x)),
                        expand = expand_scale(mult = c(0.2, 0))) +
  annotation_logticks()