Гистограмма ggplot2 имеет сплошную линию вдоль оси x, для которой нет значений - PullRequest
0 голосов
/ 27 мая 2019

Я использую ggplot2 для построения частоты измерения расстояний на разных дорогах.Ось Y - это частота, ось X - это расстояние.На всех графиках (не только на этом) я замечаю, что вдоль значения частоты 0 для всех расстояний сплошная линия - см. График здесь:

enter image description here

Например, на предоставленном мною изображении максимальное расстояние дороги составляет 25, но линия растягивается до 30. Независимо от того, на что я установил xlim, линия растягивается до этого максимального расстояния.Я не уверен, что в коде вызывает это.Ниже приведен код, который я использую для получения этого:

ggplot(ln_jan, aes(x=kilo, color=zone_sm)) +
  geom_histogram(fill="black", alpha=.8, position="identity", size =1.15)+
  xlim(0, 30)+
  ylim(0, 4000)+
  ggtitle("Road lengths")+
  ylab("Frequency")+ 
  xlab("Distance (km)")+
  theme(plot.title = element_text(hjust = 0.5, size = 21, face = "bold"))+
  scale_color_discrete(name = "road types", 
  labels=c("highways", "small roads"))+
  theme(axis.text=element_text(size=10, face = "bold"),
        axis.title=element_text(size=14,face="bold"))+
  theme(panel.background = element_rect(fill = 'gray70'))+
  theme(plot.title = element_text(size=26))

Вот заголовок набора данных для воспроизведения проблемы:

ID     kilo       zone_sm
185   12.522931      NW
234   12.702159      NW
25315  1.939652      NE
25411  1.938117      NE
25507  1.936778      NE
25603  1.935634      NE

По запросу запрашивается dput (hist(ln_jan $ kilo)):

structure(list(breaks = c(0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26), counts = c(6079L, 8898L, 4240L, 2414L, 1677L, 986L, 760L, 609L, 394L, 639L, 338L, 53L, 14L), density = c(0.112154533043061, 0.1641636839969, 0.078225895723405, 0.0445371019519575, 0.0309398177189034, 0.0181912106564333, 0.0140216228183462, 0.0112357477583853, 0.00726910446109, 0.0117892328696358, 0.00623593225342238, 0.000977823696542563, 0.000258293051916903), mids = c(1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25), xname = "ln_jan$kilo", equidist = TRUE), class = "histogram")

Вот длина (которая (ln_jan $ kilo> 25)) результат: 1. Значение этого значения равно 25.01803 ... Я немного округлил

1 Ответ

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

Проблема, с которой вы сталкиваетесь, заключается в том, что указание xlim() означает, что ggplot должен показывать частоту наблюдений в ячейках до 30, что означает, что вы получаете ячейки с частотой 0 до этого предела - толщиной вашеголиния делает это более очевидным, чем могло бы быть.Вы можете использовать coord_cartesian() вместо xlim(), чтобы показать желаемую ось х, и оставить стиль вашего графика таким же.Вот пример использования воссозданного набора данных:

set.seed(1)
df <- data.frame(x=exp(rnorm(100)))

p <- ggplot(df, aes(x)) +
  geom_histogram(fill="transparent", colour="black", size=2)

p + xlim(0,15)
p + coord_cartesian(xlim=c(0,15)) #<-- this figure shown

enter image description here

Обновленный код для вашего графика будет выглядеть так:

ggplot(ln_jan, aes(x=kilo, color=zone_sm)) +
  geom_histogram(fill="black", alpha=.8, position="identity", size =1.15)+
  coord_cartesian(xlim=c(0, 30), ylim=c(0,4000)) +
  ggtitle("Road lengths")+
  ylab("Frequency")+ 
  xlab("Distance (km)")+
  theme(plot.title = element_text(hjust = 0.5, size = 21, face = "bold"))+
  scale_color_discrete(name = "road types", 
  labels=c("highways", "small roads"))+
  theme(axis.text=element_text(size=10, face = "bold"),
        axis.title=element_text(size=14,face="bold"))+
  theme(panel.background = element_rect(fill = 'gray70'))+
  theme(plot.title = element_text(size=26))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...