ggplot2中的轴变换

Posted

技术标签:

【中文标题】ggplot2中的轴变换【英文标题】:Axis transformation in ggplot2 【发布时间】:2019-06-17 14:33:36 【问题描述】:

我正在尝试使用 ggplot2 制作箱线图,我想同时显示平均值和中位数。当我将 y 轴转换为负 log 10 时,图上显示的平均值发生了变化(X2 和 X3 被翻转)并且它们不正确。

这是我的代码:

x <- read.table("***.txt", sep="\t", header=T)

library(tidyr)

y <- x %>% gather(key, value, 2:6)

library(ggplot2)

z <- ggplot(y, aes(x = key, y = -log10(value), color = key)) + 
  geom_boxplot() + 
  theme_bw() + 
  theme(axis.text.x = element_text(angle = 90, hjust = 1), 
        axis.text = element_text(size = 12), 
        axis.title = element_text(size = 14, face = "bold")) + 
  labs(x = "" , y = "-Log10(T)") +
  coord_cartesian(ylim = c(6, 13)) + 
  scale_y_continuous(breaks = seq(6, 13, 2))

z + stat_summary(fun.y = mean, geom = "point", shape = 18, size = 3,
                 show.legend = TRUE, color = "black") +
  geom_point(aes(shape = "mean"), alpha = 0) + 
  guides(shape = guide_legend(title = NULL, override.aes = list(alpha = 1)))

means <- aggregate(value ~ key, y, mean)

means

key       value
1  X1 1.142106e-09
2  X2 1.038333e-09
3  X3 7.831222e-10
4  X4 1.216502e-09
5  X5 1.321300e-09

我使用的文件是制表符分隔的

Ratio   1           2           3           4           5    
0.01    1.56E-13    1.09E-13    1.22E-11    2.22E-12    1.79E-11   
0.02    3.98E-11    8.89E-12    2.59E-11    2.93E-11    4.88E-11   
0.03    1.96E-10    1.00E-10    1.02E-10    1.05E-10    1.90E-10
0.04    4.98E-10    2.46E-10    3.89E-10    6.68E-10    4.83E-10
0.05    7.35E-10    8.30E-10    6.59E-10    9.14E-10    9.62E-10
0.06    1.18E-09    1.25E-09    1.01E-09    1.51E-09    1.68E-09
0.07    2.05E-09    1.77E-09    1.48E-09    2.13E-09    2.13E-09
0.08    2.48E-09    2.39E-09    1.64E-09    2.62E-09    3.05E-09 
0.09    3.10E-09    2.75E-09    1.73E-09    2.97E-09    3.33E-09

【问题讨论】:

(1) 请学习如何better format你的问题,这样更容易阅读。 (2) 我强烈建议您将"accept" answers 转至您的previous questions;这样做不仅为回答者提供了一些积分,而且还为有类似问题的读者提供了一些关闭。虽然您只能接受一个答案,但您可以选择对您认为有帮助的人投票。 【参考方案1】:

我尝试在 y 数据框中添加另一列,其 log10 值为负 意味着接缝正确并符合情节

y$l10val <- -log10(y$value)

z <- ggplot(data <- y, aes(key,-log10(value),color = key)) + 
  geom_boxplot() + 
  theme_bw() + 
  theme(axis.text.x = element_text(angle = 90, hjust = 1), 
        axis.text = element_text(size = 12), 
        axis.title = element_text(size = 14, face = "bold")) + 
  labs(x = "" , y = "-Log10(Threshold)") +
  coord_cartesian(ylim = c(6, 13)) + 
  scale_y_continuous(breaks = seq(6, 13, 2))

z + stat_summary(fun.y = mean, geom = "point", shape = 18, size = 3,
                 show.legend = TRUE, color = "black") +
  geom_point(aes(shape = "mean"), alpha = 0) + 
  guides(shape = guide_legend(title = NULL, override.aes = list(alpha = 1)))

means <- aggregate(l10val ~ key, y, mean)
means

【讨论】:

我尝试了你的建议,但仍然遇到同样的问题

以上是关于ggplot2中的轴变换的主要内容,如果未能解决你的问题,请参考以下文章

R语言ggplot2可视化分面图(faceting): ggplot2可视化分面图(facet_wrap)并设置不同的分面使用不同的坐标轴数值范围以及不同的轴标签断点间隔breaks

R语言可视化包ggplot2包移除可视化图形的轴标签(刻度及其对应数值)实战(Remove Axis Labels)

R语言ggplot2可视化水平条形图(horizontal bar plot)设置水平条形图的轴文本标签左对齐(axis lables left align in horizontal bar)

R语言ggplot2可视化水平条形图(horizontal bar plot)设置水平条形图的轴文本标签左对齐(axis lables left align in horizontal bar)

ggplot2超详细讲解

R可视化ggplot2绘制重叠密度图(Overlay Density Plots)