гистограммы начинаются строго с минимального значения набора данных и должны строго заканчиваться максимальным значением набора данных - PullRequest
0 голосов
/ 19 мая 2019

Используя ggplot2 в R, я хочу построить гистограмму гистограммы, начиная строго с минимального значения набора данных, и она должна строго заканчиваться максимальным значением набора данных.

При добавлении вертикальных линий к минимумам и максимумам, ячейки гистограммы перекрывают эти значения. Я попытался уменьшить количество ящиков или изменить их количество, а также уменьшить расстояние между ними. Но ничего не помогло.

bins = 5
bwidth =  (max(data$deltaQ)-min(data$deltaQ))/bins
ggplot(data=data ) +
  geom_histogram(
    mapping=aes(x=data$deltaQ)
    , binwidth = bwidth 
    , na.rm = TRUE
    , fill = "yellow"
    , color = "black" 
    , position="stack"   #identity, dodge, stacked
    , boundary=0
  )+
  geom_vline(xintercept = min(data$deltaQ) , color = "green" , na.rm = TRUE, mapping=aes(size=5)  )+
  geom_vline(xintercept = max(data$deltaQ) , color = "green" , na.rm = TRUE, mapping=aes(size=5))+
  geom_vline(mapping=aes(size=5)  , xintercept = min(data$deltaQMin) , color = "red" , na.rm = TRUE, linetype = "longdash")+
  geom_vline(mapping=aes(size=5)  , xintercept = max(data$deltaQMin) , color = "red" , na.rm = TRUE, linetype = "longdash")+
  geom_vline(mapping=aes(size=5)  , xintercept = max(data$deltaQMax) , color = "red" , na.rm = TRUE, linetype = "longdash")+
  geom_vline(mapping=aes(size=5)  , xintercept = min(data$deltaQMax) , color = "red" , na.rm = TRUE, linetype = "longdash")+
  xlim(-50,50)

Текущая история () или geom_histogram имеют центр бина в минимуме и максимуме, что вызывает наложение. Мне нужно исключить возможность пересечения бином минимального или максимального значения.

1 Ответ

1 голос
/ 19 мая 2019

Попробуйте установить в качестве аргумента boundary значение min() или max() данных в вашем вызове geom_histogram.

Используя набор данных diamonds из ggplot2, вы можете видеть, что установка границы на min(diamonds$carat) дает границы для минимальных и максимальных значений данных. max(diamonds$carat) делает то же самое.

library(tidyverse)

data(diamonds)
diamonds <- filter(diamonds, carat <= 1)

ggplot(diamonds, aes(x = carat)) +
  geom_histogram(boundary = min(diamonds$carat)) +
  geom_vline(aes(xintercept = min(carat)), color = 'red') +
  geom_vline(aes(xintercept = max(carat)), color = 'red')

enter image description here

...