точечный график в г с огромным уникальным наблюдением - PullRequest
0 голосов
/ 01 сентября 2018

В настоящее время сюжет не полезен. Как бы я нарисовал это распределение, так как диапазон слишком велик?

У меня есть данные за 50 лет, и я должен увидеть, какая деятельность наиболее вредна.

Данные содержат около 1000 уникальных действий, скажем, column1. Я использую groupby(column1) и summarise(total = sum(column2,column3)) но проблема в том, что в 6-7 цифрах мало общего значения из-за этих двух фактов мой график x выглядит плохо, и из-за нескольких высоких значений y большинство значений находятся вблизи оси x.

SS of plot

Я полагаю, что проблема связана с осью x, так как очень много имен сгруппированы вместе из-за меньшего пространства.

Ответы [ 2 ]

0 голосов
/ 01 сентября 2018

Использование ggplot2 вместо этого и настройка альфа могут решить вашу проблему, но если этого недостаточно, вы можете пометить zoom_facet() из пакета ggforce.

set.seed(1776)      
num_obs <- 10000     
options(scipen = 999) 

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))

# install.packages('ggplot2')
library(ggplot2)
# install.packages('ggforce')
library(ggforce)

data_df <- data.frame(
  index = 1:num_obs,
  y = y)


ggplot(data = data_df, aes(x = index, y = y)) +
  geom_point(alpha=0.05) +
  facet_zoom(y = (y <= 500), zoom.size = .8) +
  theme_bw()

Результат будет выглядеть примерно так: enter image description here

Надеюсь, это поможет. Проверьте GitHub ggforce:

https://github.com/thomasp85/ggforce

0 голосов
/ 01 сентября 2018

Я думаю, что преобразование журнала может помочь вам лучше понять ваши данные:

Установите поддельные данные, которые похожи на вашу ситуацию:

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')

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')

log10_base_R

Аргумент 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)

enter image description here

С этого момента вы можете начать рассказывать, как я построил фальшивые данные, поэтому такая высокая концентрация точек находится в диапазоне 10-1000.

Надеюсь, это поможет! Я определенно рекомендую прислушаться к совету Пауло и поинтересоваться на stats.stackexchange.com, чтобы убедиться, что вы не искажаете свои данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...