我试图得到这个条形图,从最低到最高的log 10标准化值,所以所有的值都存在。我遇到的问题是小于1的数字显示为10^-负数,并且与大于1的值(10 ^正数)不同。
我找到的唯一解决方案是使用geom_segment,但由于我的数据是结构化的,因此没有解决方案可以在x位置使用字符值。
我如何让这个图形显示从0.0001到100的所有对数标度值?
dt <- read.csv("data_median.csv")
# load ggplot2
library(ggplot2)
library(hrbrthemes)
library(tidyverse)
library(dplyr)
library(ggallin)
library(scales)
quantile_plot <- ggplot(dt, aes(x = Label, y = y, color = Type)) +
geom_bar(stat = "identity") +
labs(title = 'Contaminant_plot', y = 'ng/g Wet Weight') +
scale_y_continuous(trans= 'log10') +
theme(text = element_text(size = 10)) +
scale_fill_brewer(palette = "Set1") +
coord_flip()
quantile_plot
#save to plots to disk
ggsave("Contaminant_Plot.png", width = 45.5, height = 27.78, units = 'cm', dpi = 600)
字符串
x1c 0d1x的数据
2条答案
按热度按时间nbewdwxp1#
scales::pseudo_log_trans
在这里可能有用。这是一个转换函数,使用带符号对数,在零附近平滑过渡到线性。因此,它允许您显示零值、负值以及对数标度,否则您将使用scale_x_log10
。字符串
的数据
lmyy7pcs2#
这里的棘手之处在于,从数学上讲,它产生的是完全正确的东西。您可以通过将每个值除以最小值来将“0”点设置为最小值,并使所有内容都朝向正确的方向来稍微改变它:
字符串
...变成:
型
当然,这只是一个相对的比例,比如说“o是l的10倍”。另一个解决方案是更改单位,使它们在缩放前都大于1:
型
由reprex package(v2.0.1)于2022-06-13创建