Я думаю, что преобразование журнала может помочь вам лучше понять ваши данные:
Установите поддельные данные, которые похожи на вашу ситуацию:
set.seed(1776) # reproducible random numbers
num_obs <- 10000 # set number of observations
options(scipen = 999) # don't use scientific notation
# don't worry about this code, just creating a reproducible example
y <- abs(rnorm(num_obs) + 2) * abs(rnorm(num_obs) * 50)
make_these_outliers <- runif(num_obs, min=0, max=1) > 0.99
y[make_these_outliers] <- abs(rnorm(sum(make_these_outliers), + 2) *
abs(rnorm(sum(make_these_outliers)) * 50000))
Создайте сюжет, который у вас сейчас есть, чтобы показать проблему, с которой вы столкнулись:
# recreating your current situation
plot(y, main='Ugly Plot')
преобразование Log10
Теперь мы будем использовать преобразование log10 в ваших данных для визуализации результата. Таким образом, значение «10» теперь равно «1», значение «100» теперь равно «2», значение «1000» теперь равно «3» и т. Д.
# log10
plot(log10(y), col= rgb(0, 0, 0, alpha=0.3), pch=16, main='Log Scale and Transparency - Slightly Better')
Аргумент pch = 16
заполняет точки, а alpha = 0.4
устанавливает непрозрачность каждой точки. Альфа 0,4 означает непрозрачность 40% (также можно считать ее прозрачной на 60%).
ggplot2
Я также покажу это в ggplot2, потому что, используя преобразования масштаба, ggplot2 достаточно умен, чтобы поместить истинное значение на ось Y, чтобы вам не приходилось выполнять умственную гимнастику преобразований log10 в вашей голове.
# now with ggplot2
# install.packages("ggplot2") # <-- run this if you haven't installed ggplot2 yet
library(ggplot2)
# ggplot2 prefers your data to be in a data.frame (makes it easier to work with)
data_df <- data.frame(
index = 1:num_obs,
y = y)
ggplot(data = data_df, aes(x = index, y = y)) +
geom_point(alpha=0.2) +
scale_y_continuous(trans="log10") +
ggtitle("Y-axis reflects values of the datapoints", "even better?") +
theme_bw(base_size = 12)
С этого момента вы можете начать рассказывать, как я построил фальшивые данные, поэтому такая высокая концентрация точек находится в диапазоне 10-1000.
Надеюсь, это поможет! Я определенно рекомендую прислушаться к совету Пауло и поинтересоваться на stats.stackexchange.com, чтобы убедиться, что вы не искажаете свои данные.