# Illogical Values Appearing in Graphs

I am using the R programming language. I made the following 3D plot in R:

``````# set seed for reproducibility
set.seed(123)
library(dplyr)
library(plotly)

#create data
n <- 3
my_grid <- expand.grid(i1 = 1:n, i2 = 1:n)
my_grid\$final_value = with(my_grid, sin(i1) + cos(i2) )

#make plot
plot_ly() %>%
add_trace(data = my_grid,  x=my_grid\$i1, y=my_grid\$i2, z=my_grid\$final_value, type='mesh3d') %>%
z = my_grid %>% as.matrix(),
surfacecolor = my_grid,
cauto=F,
cmax=max(my_grid\$final_value),
cmin=min(my_grid\$final_value)
)
``````

This produces the following plot: As expected, this plot seems to be very logical : it shows a 3D surface where x = i1, y = i2, z = final_value, and the color of the plot is according "final_value".

Problem: If I try to add some more data to the grid and then create the plot:

``````#create more data
n <- 50
my_grid <- expand.grid(i1 = 1:n, i2 = 1:n)
my_grid\$final_value = with(my_grid, sin(i1) + cos(i2) )

#make plot
plot_ly() %>%
add_trace(data = my_grid,  x=my_grid\$i1, y=my_grid\$i2, z=my_grid\$final_value, type='mesh3d') %>%
z = my_grid %>% as.matrix(),
surfacecolor = my_grid,
cauto=F,
cmax=max(my_grid\$final_value),
cmin=min(my_grid\$final_value)
)
`````` Not only does this graph look "strange", but the "y-coordinate" (1697) within the hover text is displaying a value which is not present within the original data:

``````#display histogram of values

par(mfrow=c(1,3))

hist(my_grid\$i1)
hist(my_grid\$i2)
hist(my_grid\$final_value)
`````` Question: In the above histogram, a value of "1697" does not appear in any of the variables. So how is it possible that such a large value is displayed within the plotly diagram?

Thanks

It looks like the y-limits are also wrong on the first plot? Note they go to about 9, not 3. So, I think the issue may be with you plot_ly call and that it's using the row #s. Is this closer:

``````library(dplyr)
library(plotly)

n <- 50
my_grid <- expand.grid(i1 = 1:n, i2 = 1:n)
my_grid\$final_value = with(my_grid, sin(i1) + cos(i2) )

z = my_grid %>% as.matrix()

#dim(my_grid)
#tail(my_grid)

my_grid %>% plot_ly(x=my_grid\$i1, y=my_grid\$i2, z=my_grid\$final_value) %>% add_trace(type='mesh3d') %>% add_surface(z = my_grid %>% as.matrix())
``````

My guess is that the `add_surface()` call isn't quite right yet, particularly the z- function...

1 Like

Is this what you're trying to do:

``````my_grid<- matrix(nrow=n, ncol=n)
for(i in 1:n) for (j in 1:n) my_grid[i,j] <- sin(i)+cos(j)
dim(my_grid)
plot_ly(z=~my_grid) %>%
``````

There's probably a better way to create the data then the nested for loops, but I think is how `plot_ly()` and `add_surface()` are expecting the data.

Thank you so much for your reply!

I tried to re-run your code and noticed the following:

There still seems to be a point (1, 21, 49) on this graph which does not appear in the original data:

``````#display histogram of values

par(mfrow=c(1,3))

hist(my_grid\$i1)
hist(my_grid\$i2)
hist(my_grid\$final_value)
``````

Do you have any ideas why this might be happening?
Thanks for all your help!

And here it is again with a better solution than the nested for loops:

``````fun1 <- function(x,y){sin(x)+cos(y)}
n <- 50
my_grid <- outer(1:n,1:n,fun1)
plot_ly(z=~my_grid) %>%
``````
1 Like

But why is this point still appearing on the graph that is not in the data frame?

Thanks for all your help!

I think this latest version doesn't have that other point?

``````fun1 <- function(x,y){sin(x)+cos(y)}
my_grid <- outer(1:50,1:50,fun1)
plot_ly(z=~my_grid) %>% add_trace(type='mesh3d') %>%