geom_col назначает неправильную независимую переменную - PullRequest
2 голосов
/ 25 мая 2020

У меня есть простой фрейм данных с двумя переменными с третьей переменной, действующей как фактор

DF <- data.frame(Depth = c(8.6, 19.6, 42.6, 60.6, 79.4, 101.4, 121.4, 137.6, 163, 180),
       Rb = c(103, 59, 99, 53, 107, 87, 52, 33, 105, 49),
       Litho = as.factor(c(1,2,1,2,1,1,2,2,1,2)))

Я хочу создать гистограмму абсолютных значений, поэтому я использую geom_col(). Я хочу построить график Rb как функцию глубины, поэтому глубина должна быть дискретной переменной. Однако, когда я рисую, используя

ggplot (DF, aes(x=Depth, y=Rb))+
geom_col()

, на графике есть горизонтальные полосы, которые показывают, какая глубина существует при каждом дискретном показании Rb. Я хочу видеть значение Rb на каждой дискретной глубине. enter image description here Перестановка x и y дает ту же проблему, только с вертикальными полосами

ggplot (DF, aes(x=Rb, y=Depth))+
geom_col()

enter image description here Я также пробовал то же самое с geom_bar(stat = 'identity'), но это все та же проблема.

РЕДАКТИРОВАТЬ - ЭТО РАБОТАЕТ, ЕСЛИ КТО МОЖЕТ ОБЪЯСНИТЬ, ПОЧЕМУ

ggplot (DF, aes(x=Depth, y=Rb/10, fill=Litho)) +
geom_bar(stat='identity') +
labs(x="Depth", y="Rb") +
scale_x_continuous (trans = "reverse") +
scale_y_continuous (position = "right") +
coord_flip()

По какой-то причине деление значений Rb на 10 сортов проблема вне ?? Деление на любое число больше 2 работает, но если вы разделите на 1 или 2 (Rb, Rb / 1 или Rb / 2), он сгруппирует данные, как на приведенных выше графиках, и полосы будут вертикальными, а не горизонтальными ?? enter image description here Спасибо, Джереми

Ответы [ 2 ]

2 голосов
/ 31 мая 2020

Вы можете принудительно установить ориентацию в geom_col() с помощью аргумента "orientation".

From ?geom_col:

orientation Ориентация слоя. По умолчанию (NA) автоматически определяется ориентация на основе сопоставления aestheti c. В редких случаях, когда это не удается, его можно задать явно, задав для orientation значение "x" или "y".

[geom_col] обрабатывает каждую ось по-разному и, таким образом, может иметь два ориентации. Часто ориентацию легко вывести из комбинации данных сопоставлений и типов используемых позиционных шкал. Таким образом, ggplot2 по умолчанию пытается угадать, какую ориентацию должен иметь слой. В редких случаях ориентация бывает неоднозначной, и догадки могут не удастся. В этом случае ориентацию можно указать напрямую с помощью параметра orientation, который может иметь значение "x" или "y". Значение указывает ось, по которой должен проходить геометрия, "x" - это ориентация по умолчанию, которую вы ожидаете для геометрии.

См. Также обсуждение в проблеме Неожиданная (?) Ориентация с geom_col .

ggplot (DF, aes(x = Depth, y = Rb)) +
  geom_col(orientation = "x")

введите описание изображения здесь

0 голосов
/ 25 мая 2020

На основе ваших изображений я попытался создать результат, который вы ищете:

ggplot(DF, aes(x=rank(Depth), y=Rb, fill=Litho)) +
  geom_bar(stat="identity") +
  labs(x="Depth", y="Rb") + 
  scale_x_continuous(breaks=seq(0,15,1), trans = "reverse") +
  scale_y_continuous(position="right") +
  coord_flip(xlim=c(0,15)) +
  theme(panel.grid.major.y = element_blank(), 
        panel.grid.major.x = element_line(colour = "grey50"))

дает
Rplot

Используйте scale_fill_brewer(palette="Paired") + for - это цветовые темы, указанные в RColorBrewer::display.brewer.all().

One Last Try

Я просто догадываюсь, чего вы действительно хотите. Модификация моего кода, показанного выше

ggplot(DF, aes(x=Depth, y=Rb, fill=Litho)) +
  geom_bar(stat="identity") +
  labs(x="Depth", y="Rb") + 
  scale_x_continuous(breaks=seq(0,200,50), trans = "reverse") +
  scale_y_continuous(position="right") +
  coord_flip(xlim=c(0,200)) +
  theme(panel.grid.major.y = element_blank(), 
        panel.grid.major.x = element_line(colour = "grey50"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...