ggparcoord участок с пробелами - PullRequest
1 голос
/ 18 марта 2020

В науках о Земле мы часто используем параллельные координатные графики со значениями, нормализованными, например, для хондритового метеорита.

При построении нормализованного графика хондритов REE вы наносите на карту все редкоземельные элементы (La, Ce, Pr , Nd, Pm, Sm, Eu, Gd, Tb, Dy, Ho, Er, Tm Yb, Lu). Однако, поскольку период полураспада для Pm очень короткий, у вас не может быть анализов для этого элемента. Тем не менее, на графиках RED Chondrite вы по-прежнему включаете Pm, но без точек данных. Линия все еще проходит через это. Это сделано для того, чтобы вы могли легко сравнить свои шаблоны с другими шаблонами. Вот пример: Первое изображение из поиска Google

Я хотел бы создать аналогичный график, однако я не могу понять, как "пропустить" Pm в моем графике и оставить пробел в точках данных, но все еще есть линия, проходящая через пробел.

Вот пример:

Sample <- c("sample1", "sample2")
Pr <- c(1,5)
Nd <- c(2,4) 
Pm <- c(NA,NA)
Sm <- c(3,3)
Eu <- c(4,2)

df <- data.frame(Sample, Pr, Nd, Pm, Sm, Eu)

Теперь я хотел бы создать параллельный координатный график следующим образом:

ggparcoord(df, columns = 2:6, showPoints=TRUE, scale="globalminmax")

Однако, поскольку в моем фрейме данных NA s, он не будет работать с scale = "globalminmax".

Любая идея о том, как я мог бы все еще создать параллельный координатный график и сохранить Pm на графике?

РЕДАКТИРОВАТЬ:

Пример с 3 выборками, организованными в 2 группы:

Sample <- c("sample1", "sample2","sample3")
grouping <- c("gr1","gr2","gr1")
Pr <- c(1,5,1)
Nd <- c(2,4,1) 
Pm <- c(NA,NA,NA)
Sm <- c(3,3,1)
Eu <- c(4,2,1)

df <- data.frame(Sample, grouping, Pr, Nd, Pm, Sm, Eu)

Линии и точки данных должны быть окрашены в соответствии с «группировкой», тогда как линии должны соединять только отдельные образцы.

1 Ответ

1 голос
/ 18 марта 2020

Так что здесь используется не ggally, а база ggplot2, но я думаю, что примерно так я интерпретирую ваше описание сюжета.

# Wide to long format
df2 <- reshape2::melt(df, id.vars = "Sample")
# Omit NAs
df2 <- df2[!is.na(df2$value),]

ggplot(df2, aes(variable, value, colour = Sample, group = Sample)) +
  geom_point() +
  geom_line() +
  # Set limits to keep 'Pm' in axis
  scale_x_discrete(limits = levels(df2$variable))

enter image description here

РЕДАКТИРОВАТЬ: Для адресации группы, да, вы можете. Я не знал точно, какую переменную вы будете раскрашивать в этом случае, не стесняйтесь поменять эстетику colour и group в приведенном ниже примере.

df2 <- reshape2::melt(df, id.vars = c("Sample", "grouping"))
df2 <- df2[!is.na(df2$value),]

ggplot(df2, aes(variable, value, colour = grouping, group = Sample)) +
  geom_point() +
  geom_line() +
  scale_x_discrete(limits = levels(df2$variable))
...