目前,情节没用。我如何绘制这个分布,因为范围太高了?
我有50年的数据,并且必须查看哪种活动最有害。
该数据包含大约1000个独特的活动,例如column1
。我正在使用groupby(column1)
和summarise(total = sum(column2,column3))
,但问题是6到7位数的总值很少,因为这两个事实我的情节x看起来很糟糕并且由于很少的高值y大多数值都在x轴附近。
我认为问题出在x轴,因为由于空间较小,所以很多名称都聚集在一起。
我认为日志转换可以帮助您从数据中获得更好的洞察力:
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转换,以显示结果。因此值“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非常聪明,可以将真值放在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范围内存在如此高浓度的点。
希望这有帮助!我绝对建议接受PauloH的建议并询问stats.stackexchange.com以确保您不会歪曲您的数据。
使用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()
希望能帮助到你。检查ggforce
的GitHub: