当前,绘图没有用。由于范围太高,我将如何绘制此分布?
我有50年的数据,必须查看哪种活动最有害。
数据包含约1000个唯一活动,例如column1
。
我正在使用groupby(column1)
和summarise(total = sum(column2,column3))
但问题是6到7位数字的总值很少
由于这两个事实,我的图x看起来不好,并且由于高值y很少,大多数值都在x轴附近。
我相信问题出在x轴上,因为由于空间较小,所以很多名称都聚集在一起。
答案 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')
现在,我们将对数据使用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
设置每个点的不透明度。 alpha为0.4表示不透明度为40%(也可以将其视为60%透明)。
我还将在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)
在这一点上,您可以开始讲述我是如何构造虚假数据的,这就是为什么在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()
希望有帮助。检查ggforce
的GitHub: