#r #ggplot2 #scatter-plot
#r #ggplot2 #диаграмма рассеяния
Вопрос:
Я хотел бы создать диаграмму рассеяния плотности с масштабом log10 в R. Я попытался построить ее с помощью ggplot и stat_density2d в R. Я использовал этот код:
ggplot(data=vod_agb_df, aes(vod, agb))
stat_density2d(aes(fill = ..density..), geom = "tile", contour = FALSE, n = 100)
scale_fill_distiller(palette = 'YlOrRd', direction = 1)
scale_x_continuous(breaks=seq(0, 1, 0.25), limits = c(0, 1))
scale_y_continuous(breaks=seq(0, 300, 50), limits = c(0, 300))
labs(x='L-VOD', y='AGB(Mg/ha)')
theme_bw()
Но результат выглядит странно. диаграмма рассеяния плотности с моим кодом
Это график, который я хочу построить
Исходная диаграмма рассеяния
Ответ №1:
Вы можете log10
преобразовать плотность; вот минимальный и воспроизводимый пример
library(MASS)
library(tidyverse)
set.seed(2020)
mvrnorm(100, mu = c(0, 0), Sigma = matrix(c(1, 0.5, 0.5, 1), 2, 2)) %>%
as_tibble() %>%
ggplot(aes(V1, V2))
stat_density2d(
aes(fill = log10(..density..)), geom = "tile", contour = FALSE, n = 100)
scale_fill_distiller(palette = 'YlOrRd', direction = 1)
theme_bw()
Обновить
Мне непонятно, что вы подразумеваете под «»Я хотел бы создать диаграмму рассеяния плотности в области распределения точек, а не во всей области графика.»» Если вы спрашиваете, как увеличить высоту градиентной цветовой полосы, вы можете сделать следующее
set.seed(2020)
mvrnorm(100, mu = c(0, 0), Sigma = matrix(c(1, 0.5, 0.5, 1), 2, 2)) %>%
as_tibble() %>%
ggplot(aes(V1, V2))
stat_density2d(
aes(fill = log10(..density..)), geom = "tile", contour = FALSE, n = 100)
scale_fill_distiller(palette = 'YlOrRd', direction = 1)
theme_bw()
guides(fill = guide_colorbar(barheight = unit(3.5, "in"), title.position = "right"))
Комментарии:
1. спасибо за ваш ответ. Но кажется, что цветной график плотности является минимальным ограничивающим прямоугольником точек рассеяния. Я опубликовал исходную диаграмму рассеяния в вопросе.
2. @changkx Я не знаю, что вы подразумеваете под «минимальным ограничивающим прямоугольником». Градиентная цветовая шкала соответствует плотности, преобразованной в log10. Я думал, что это то, что вам нужно (график, который вы показываете, предполагает это)? Или вы хотите преобразовать значения log10-transform по осям x и / или y?
3. Да, преобразованная в log10 плотность — это то, что я хочу. Но в соответствии с исходной диаграммой рассеяния (я обновил ее в ответе). Я хотел бы создать диаграмму рассеяния плотности в области распределения точек, а не во всей области графика.
4. @changkx «Я бы хотел создать диаграмму рассеяния плотности в области распределения точек, а не во всей области графика». Извините, но я действительно не понимаю, что вы имеете в виду. Что такое «область распределения точек»? Возможно, вы спрашиваете, как увеличить высоту градиентной цветовой шкалы, чтобы она соответствовала высоте графика?
5. Спасибо за ваш подробный и информативный ответ. Извините за мое замешательство. Как показано на «Исходной диаграмме рассеяния» , существует приблизительная линейная зависимость. Итак, я хотел бы отобразить ее как диаграмму рассеяния плотности, точно так же, как «образец графика» в вопросе.
Ответ №2:
Какой бы график вы ни показывали в качестве ожидаемого результата, для этого вы можете использовать следующий код
library(tidyverse)
# Bin size control color palette
ggplot(iris, aes(x=Sepal.Length, y=Petal.Length) )
geom_bin2d(bins = 20)
scale_fill_distiller(palette = 'YlOrRd', direction = 1)
theme_bw()
theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank())
Комментарии:
1. Я не уверен, что это отвечает на вопрос OPs: (1) OP хочет показать график плотности 2d, вы показываете количество . (2) OP хотел бы log10-преобразовать плотность; вы не преобразуете данные в журнал.
2. Да, Мауриц Эверс. Вы правы. Если бы подсчеты можно было заменить на log10-преобразованную плотность, это то, что я хочу, точно так же, как образец графика.