3D Plotly scatter plot with 2D plane

I am plotting a 3D chart with three variables, which are date, diffusion, and avg_Entropy. I would like to insert a simple 2D plane horizontally into the scatter plot that will serve as a threshold for diffusion. I have served multiple forums and tutorials for such an implementation, and all I can find is how to insert a regression line which is not really what I want. I would like to be able to, for example, insert a transparent plane through the 100 value for “diffusion” so that any points above this threshold meet the criteria for my experiment. Here is my current code.

plot_ly(color = ~factor(date), showlegend = T) %>%
add_markers(data = tweets, x = ~date, y = ~avg_Entropy, z = ~diffusion) %>%
add_paths(data = tweets, x = ~date, y = ~avg_Entropy, z = ~diffusion)

Hi @jdude48. You can use add_mesh with opacity argument.


df <- data.frame(x = rnorm(10), y = rnorm(10), z = rnorm(10))
planDf <- data.frame(x = rep(range(df$x), 2), y = rep(range(df$y), each = 2), z = mean(df$z))
plot_ly(df) %>%
  add_markers(x = ~x, y = ~y, z = ~z) %>%
  add_mesh(x = ~x, y = ~y, z = ~z, data = planDf, opacity = 0.3)

Thank you very much for the reply raytong. Do I just substitute my "tweets" data frame for the "df" data frame from your example? If that is the case, what values do I insert into the rnorm() functions? Is the "10" just refer to the number of desired rows from the data set?

@jdude48. Because you didn't provide sample data, I generate the sample data by random rnorm function. In your case, the code should be somethings like below.


planDf <- data.frame(x = rep(range(tweets$date), 2), y = rep(range(tweets$avg_Entropy), each = 2), z = 100)

plot_ly(tweets) %>%
  add_markers(x = ~date, y = ~avg_Entropy, z = ~diffusion, color = ~factor(date), showlegend = T) %>%
  add_mesh(x = ~x, y = ~y, z = ~z, data = planDf, opacity = 0.3)

Thank you, raytong. That worked perfectly.

raytong, I was altering some of the parameters to tweak the appearance of the plane a little bit. I tried "color" and I tried "colorscale" but neither of those would change the color of the plane. Also, how can I expand the size of the plane a little bit? There are some of my points in the plot that do not intersect with the threshold plane. Thank you.

@jdude48. I still cannot figure out how to accurately set color for plotly. For expand the size, you can multiple the coordinate by factor.

mulFactor = 1.2
planDf <- data.frame(x = rep(range(tweets$date) * mulFactor, 2), y = rep(range(tweets$avg_Entropy) * mulFactor, each = 2), z = 100)

raytong, I used the mulFactor and played around with the factor numbers and the plane size kept getting smaller and smaller. Here was the code that I used.

mulFactor = 6
planDf <- data.frame(x = rep(range(tweets$date)*mulFactor, 2), y = rep(range(tweets$avg_Entropy)*mulFactor, each = 2), z = 70)

The 2D mesh was tiny when the graph rendered. Should I be creating the factor parameters differently?

@jdude48. I can't think of what cause the problem. Do you have any sample data for me to test for?