2016-07-18 4 views
3

다음 예제를이 blog post 에서 실행하여 3D 차트를 그립니다. 코드는 오류없이 실행되지만 출력은 예상대로 아닙니다. 여기ggplot을 사용하여 3D 그래프를 그리는 방법은 무엇입니까?

library(plotly) 
pp <- function (n,r=4) { 
    x <- seq(-r*pi, r*pi, len=n) 
    df <- expand.grid(x=x, y=x) 
    df$r <- sqrt(df$x^2 + df$y^2) 
    df$z <- cos(df$r^2)*exp(-df$r/6) 
    df 
} 
qplot(x, y, data=pp(100), geom="tile", fill=z) 
ggplotly() 

그리고 여기가 내가, plotly을 설치 질문에서 코드를 복사하고 완벽하게 정상적으로 실행 enter image description here

+1

'py'를 정의하십시오. 대신'ggplotly()'를 실행하고 싶을 것입니다. – Axeman

+0

무엇이 잘못 되었습니까? 오류가 발생합니까? 그렇다면 오류는 무엇이라고 말합니까? 제대로 보이지 않는 줄거리가 보입니까? R 세션이 충돌합니까? – Gregor

+0

@ 그레고르 죄송하지만 지금은 분명해야합니다. – Dambo

답변

4

기대하는 것입니다 코드를입니다. 그러나 그것은 실제로 당신이 첨부 한 3D 플롯을 반환하지 않습니다. 그 이유는 이제 ggplolty()이 ggplot을 가져 와서 "플롯 플롯으로 변환"합니다. 블로그 포스트에 주어진 예제는 B 볼커 (Bolker)가 언급 한 바와 같이 가장 가치가 떨어질 가능성이 큽니다.

그러나 이것에 대한 단점이 있습니다. plotly에는 여전히 표면 플롯에 대한 옵션이 있습니다 (plotly-documentation 참조). 즉, 다음 코드를 사용하여 예제를 다시 만들 수 있습니다.

library(reshape2) 
library(plotly) 
# 
pp <- function (n,r=4) { 
    x <- seq(-r*pi, r*pi, len=n) 
    df <- expand.grid(x=x, y=x) 
    df$r <- sqrt(df$x^2 + df$y^2) 
    df$z <- cos(df$r^2)*exp(-df$r/6) 
    df 
} 
data_xyz <- pp(100) 
data_z <- acast(data_xyz, x~y, value.var = "z") 
plot_ly(z = data_z, type = "surface") 
+0

내가 링크 된 블로그 게시물을 올바르게 이해했다면 실제로 그 코드를 실행해야만하는 출력입니다. – Dambo

+0

@Dambo 안녕하세요. 설명해 주셔서 감사합니다. 내 편집 된 답변을 참조하십시오. 나는 당신이 알고 싶었던 것을 당신에게 알려주기를 희망한다. 그럴 경우 = =) – Daniel

+0

고마워. 내가 게시 한 그림과 당신의 해법 사이에 어떤 불일치가있는 사람에게는 : 그림에서 그래프는 거꾸로되어 있습니다. – Dambo

관련 문제