簡體   English   中英

R:大小數據框相似的圖

[英]R: Similar plot with big and small data frame

我試圖找到一種使用相同功能繪制不同大小的數據幀的方法。 數據與下面的dfs非常相似。 xs的順序並不重要。

GetDf <- function(n)
  data.frame(x = seq(1, n), y = rnorm(n, 3.5, 0.5), group = runif(n) > 0.5)

PlotIt <- function(df) {
  p <- ggplot(df) + geom_point(aes(x = x, y = y, colour = group)) +
        expand_limits(y = 1) + expand_limits(y = 5) +
        geom_hline(aes(yintercept = c(2.5, 4.5)), linetype = "dotdash")
  print(p)
}

df1 <- GetDf(1000)
df2 <- GetDf(10000)
df3 <- GetDf(100000)
df4 <- GetDf(1000000)

PlotIt(df1)看起來還不錯,但是PlotIt(df2)已經不好了。 點重疊。 當n很大時,我可以將點大小設置得較小,但是df1-df4的圖看起來會完全不同。 如果大小是固定的,則df3的圖需要像size = 0.75之類的東西,並且PlotIt(df1)不好。

我知道這里有hexbin和geom_hex()庫,但它似乎並沒有產生我想要的。 我想用不同的顏色顯示組,hexbin不利於繪制df1等。

繪制至少df1-df3,最好還繪制df4的最佳方法是什么,以使這些圖“感覺”相同並且看起來不錯? (對於模糊性,我感到抱歉,但我不知道具體點。)

我按照krlmlr的答案進行操作,並編寫了一個根據df的行數計算alpha的函數。 另外,選擇更好的形狀會使圖更好。 對於低alpha值,需要override.aes。

PlotIt <- function(df) {
  Alpha <- function(x) pmax(0.1, pmin(1, 2.05 - 0.152 * log(x)))
  p <- ggplot(df) + 
    geom_point(aes(x = x, y = y, colour = group), size = 1.5,
               shape = 1, alpha = Alpha(nrow(df))) +
    expand_limits(y = 1) + expand_limits(y = 5) +
    geom_hline(aes(yintercept = c(2.5, 4.5)), linetype = "dotdash") +
    guides(colour = guide_legend(override.aes = list(alpha = 1)))
  print(p)
}

df1-df3的圖對我來說沒問題(全屏)。 問題有點類似於Scatterplot,點太多 區別:相同的功能應適用於大數據幀和小數據幀,並且x的順序並不重要。

我懷疑您不想跟蹤散點圖中1000點或更多點的單個點。 您為什么不使用樣品?

PlotIt <- function(df) {
  df <- sample.rows(df, 1000, replace=F)
  ...
}

sample.rows在我kimisc )。

如果您確實要顯示所有點,請在geom_point使用一個alpha值。 確保將繪圖導出為柵格而不是矢量圖像,否則將需要一段時間才能渲染:

  geom_point(aes(...), alpha=get_reasonable_alpha_value(df))

您必須做一些實驗來實現get_reasonable_alpha_value 它應該返回介於0(完全透明)和1(不透明)之間的值。

也許二維密度估計會更適合您:

  geom_density2d(...)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM