Построение двухосной диаграммы в R

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

sens <- structure(list(W = c(5216400.4123, 5399804.7349, 5595563.3087, 
5792353.9932, 5993467.7466, 6189404.9279, 6380940.454, 6566630.3544, 
6747453.6816, 6917820.9796, 7086201.8275, 7248213.5225, 5402700.4252, 
5592654.9057, 5795404.8549, 5999223.7818, 6207520.1695, 6410455.1037, 
6608831.1825, 6801152.8706, 6988434.1695, 7164886.0132, 7339280.46, 
7507078.2886, 5589000.4397, 5785505.0748, 5995246.3993, 6206093.5662, 
6421572.589, 6631505.2817), t = structure(c(1L, 2L, 3L, 4L, 5L, 
6L, 7L, 8L, 9L, 10L, 11L, 12L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 
9L, 10L, 11L, 12L, 1L, 2L, 3L, 4L, 5L, 6L), .Label = c("t_m75_tc", 
"t_m5_tc", "t_m25_tc", "t_p0_tc", "t_p25_tc", "t_p5_tc", "t_p75_tc", 
"t_p10_tc", "t_p125_tc", "t_p15_tc", "t_p175_tc", "t_p20_tc"), class = "factor"), 
    p = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 
    3L, 3L, 3L, 3L), .Label = c("h_30", "h_27.5", "h_25", "h_22.5", 
    "h_20", "h_17.5", "h_15", "h_12.5", "h_10", "h_7.5", "h_5", 
    "h_2.5", "h_1", "h0", "h1", "h2.5", "h5", "h7.5", "h10", 
    "h12.5", "h15", "h17.5", "h20", "h22.5", "h25", "h27.5", 
    "h30"), class = "factor"), tt = c(-7.5, -5, -2.5, 0, 2.5, 
    5, 7.5, 10, 12.5, 15, 17.5, 20, -7.5, -5, -2.5, 0, 2.5, 5, 
    7.5, 10, 12.5, 15, 17.5, 20, -7.5, -5, -2.5, 0, 2.5, 5), 
    hh = c(-30, -30, -30, -30, -30, -30, -30, -30, -30, -30, 
    -30, -30, -27.5, -27.5, -27.5, -27.5, -27.5, -27.5, -27.5, 
    -27.5, -27.5, -27.5, -27.5, -27.5, -25, -25, -25, -25, -25, 
    -25)), .Names = c("W", "t", "p", "tt", "hh"), row.names = c(NA, 
30L), class = "data.frame")

Так выглядит оригинальный df. В приведенных выше воспроизводимых данных я включил только 30 строк.

> str(sens)
'data.frame':   324 obs. of  5 variables:
 $ W : num  5216400 5399805 5595563 5792354 5993468 ...
 $ t : Factor w/ 12 levels "t_m75_tc","t_m5_tc",..: 1 2 3 4 5 6 7 8 9 10 ...
 $ p : Factor w/ 27 levels "h_30","h_27.5",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ tt: num  -7.5 -5 -2.5 0 2.5 5 7.5 10 12.5 15 ...
 $ hh: num  -30 -30 -30 -30 -30 -30 -30 -30 -30 -30 ...

Мне нужно построить W vs tt and hh на той же диаграмме с двумя осями Y. Я пытался построить график с помощью ggplot2, но позже узнал, что ggplot не поддерживает 2 оси y. Есть ли другой способ построить данные? Я бы хотел что-нибудь вроде этого :: Построение двухосной диаграммы в RПостроение двухосной диаграммы в R

Вы можете построить их в отдельных фасетах с facet_wrap с scales = "free_y"

alistaire 01.05.2018 18:54

Я выбираю что-то другое ... огранка мне не подходит. Я пробовал это, и это не то, что я хочу @alistaire Если есть что-то еще ??

anup 01.05.2018 18:59

Взгляните на ggtern.com

Matias Andina 01.05.2018 19:11

Ребята из ggplot2 неохотно добавили вторичные оси в релиз несколько месяцев назад, но что-то вроде ggtern, вероятно, было бы более подходящим.

camille 01.05.2018 19:17

да @camille, но я подумал, что вторичная ось может быть только некоторой кратной или функциональной производной от первой оси.

anup 01.05.2018 19:23

Да, ты прав. Поэтому, если эти оси независимы друг от друга, более подходящим будет что-то вроде тройного сюжета. Вы можете проверить Проект Data Viz на предмет идей о том, как вы хотите визуализировать многомерные данные, а затем выяснить конкретный вопрос о том, как построить эту визуализацию.

camille 01.05.2018 19:28

График с двумя осями y, которые не являются просто преобразованием, в большинстве случаев вводит в заблуждение, поэтому это невозможно в ggplot. Обычные альтернативы - это фасеточные и бревенчатые весы. В этом случае другой вариант - сопоставить одну из переменных y с другой эстетикой, например с цветом, хотя, очевидно, таким образом сложнее увидеть пропорциональные различия. Другой вариант - ширина линии / размер в пунктах.

alistaire 01.05.2018 19:30
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
7
260
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот моя попытка с вашими данными. Обратите внимание на масштабирование троичной оси

library(ggtern)
ggtern(sens, aes(x = W/max(W),z=tt/max(tt), y=hh/max(hh))) +
 geom_point(size=3, col='red') +
 theme_bw()

Просто чтобы добавить мощное представление (как предлагается в комментариях).

ggplot(sens, aes(W, tt, group=hh, color=hh)) +
 geom_point() +
 geom_line(lwd=1) +
 theme_bw() +
 scale_color_continuous(low = "black", high = "red")

Я бы также предложил участки на поверхности.

require(rgl)  
surface3d(x, y, z)

линейная диаграмма не подходит, у меня большие данные. для тройного участка. . вопрос 1, почему использовать W / max (W), а не только W? то же самое для tt и hh

anup 01.05.2018 19:54

Я масштабирую данные так, чтобы все 3 оси находились в гипотетической шкале от 0 до 1 (или от 0 до 100%). Есть и другие способы масштабирования данных или игры с осью. Для этого я бы отослал вас к документации по ggtern. Если у вас много данных, я могу предложить поверхностный график. Это может зависеть от 3D-шаблона (опубликованные вами данные кажутся вполне упорядоченными).

Matias Andina 01.05.2018 23:34

Я не совсем понимаю, что вы имеете в виду под поверхностным сюжетом ... это 2D-сюжет, такой как линейный сюжет, который вы опубликовали? И что вы имеете в виду, говоря, что мои данные - это упорядоченные данные? Это плохо?

anup 02.05.2018 08:26

Можете ли вы предоставить мне ссылки на хорошую документацию по поверхностным участкам?

anup 02.05.2018 09:15

@anup Упорядочен как у вас есть четкий эффект (линии параллельны друг другу). Нет хорошего / плохого, это просто природа ваших данных. Вы можете поболтать о поверхностных участках, я просто привел общий пример. Этот вопрос становится слишком широким и может быть закрыт на голосование. Первоначальный вопрос заключался в том, как создать тройной график в R, и я считаю, что на него был дан ответ.

Matias Andina 02.05.2018 17:17

Другие вопросы по теме