具有巨大独特观察力的r中的散点图

时间:2018-09-01 16:51:47

标签: r plot distribution scatter-plot outliers

当前,绘图没有用。由于范围太高,我将如何绘制此分布?

我有50年的数据,必须查看哪种活动最有害。

数据包含约1000个唯一活动,例如column1。 我正在使用groupby(column1)summarise(total = sum(column2,column3)) 但问题是6到7位数字的总值很少 由于这两个事实,我的图x看起来不好,并且由于高值y很少,大多数值都在x轴附近。

SS of plot

我相信问题出在x轴上,因为由于空间较小,所以很多名称都聚集在一起。

2 个答案:

答案 0 :(得分:2)

我认为对数转换可以帮助您更好地了解数据:

设置一些与您的情况类似的虚假数据:

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设置每个点的不透明度。 alpha为0.4表示不透明度为40%(也可以将其视为60%透明)。

ggplot2

我还将在ggplot2中对此进行演示,因为使用比例转换,ggplot2足够聪明,可以将真实值放在y轴上,以防止您不得不对脑部进行log10转换的心理体操。 / p>

# 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范围内存在如此高的点集中度的原因。

希望这会有所帮助!我绝对建议您接受PauloH的建议,并在stats.stackexchange.com上四处询问,以确保您不会误解您的数据。

答案 1 :(得分:2)

改为使用ggplot2并设置alpha可以解决您的问题,但是如果这还不够,您可能需要从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

希望有帮助。检查ggforce的GitHub:

https://github.com/thomasp85/ggforce