Is it possible to have multiple axes plots in Plotly R

Is it possible to have multiple axes (for eg., two x-axis with a y axis in a single plot).

Tried to do like in this link,

Attaching my code,

IVx <- combined[,"Volts"] <- as.numeric(as.character(combined[,"Volts"]))
      IVy <- abs(as.numeric(as.character(combined[,"Amps"])))
      #yvar <- combined[,"Amps"] <- abs(as.numeric(as.character(combined[,"Amps"])))
      yvar <- abs(as.numeric(as.character(combined[,"Amps"])))
      #xvar <- as.numeric(combined[,"Leakage"])
      xvar <- combined[,"Leakage"] <- as.numeric(as.character(combined[,"Leakage"]))

a <- list(
    title = paste("Volts", "(V)"),
    showticklabels = TRUE,
    linecolor = toRGB("black"),
    linewidth = 2,
    zeroline = FALSE
    
  )
  
  b <- list(
    title= paste("Amps"),
    showticklabels= TRUE,
    exponentformat = "e",
    zeroline=FALSE,
    linecolor = toRGB("black"),
    linewidth = 2
  )
  c <- list(
    title = paste("Leakage"),
    overlaying = "x",
    type="log10",
    showticklabels = TRUE,
    linecolor = toRGB("black"),
    linewidth = 2,
    zeroline = FALSE
    
  )
  if(nrows!=1){
  # ronpoints <- jaspertlptable$ronpoints
  # fitRon <- lm(ronpoints[,"Amps"] ~ ronpoints[,"Volts"])
  # print(fitRon)
    
    PLOT <- plot_ly(combined, x=IVx, y=IVy, color = ~group, legendgroup=~group , mode = "lines+markers", symbol = ~group)#, marker=list(symbol=c("cross", "square", "triangle-down"), size=8))#%>%add_lines(x= ~ ronpoints[,"Volts"], y=fittef(fitRon))
    PLOT <- plot_ly(combined, x=xvar, y=IVy, xaxis="x2", color = ~group, legendgroup=~group , mode = "lines+markers", symbol = ~group)
    PLOT<- PLOT%>%layout(xaxis=list(title=paste("Volts(V)"), xaxis=a, yaxis=b,xaxis2 = c, showticklabels = TRUE, linecolor = toRGB("black"),linewidth = 2,zeroline = FALSE), yaxis=b,autosize = F,width=1000,height = 700, annotations = list(x = 0.2 , y = 1.07, text = "TLP IV Plot", showarrow = F, xref='paper', yref='paper'), showlegend = TRUE  ,legend = list(font = list(size = 8)))
    # 

But my plot is showing like this with only one set of plots,

My data frame looks like this,

Amps Volts Leakage macro device chip group
1.63E-04 1.86 0.00 R_NSPESDNFETSLPE01E NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1 0 0 0 0 R_NSPESDNFETSLPE01E NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1
1.13E-04 2.25 0.00 R_NSPESDNFETSLPE01E NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1 0 0 0 0 R_NSPESDNFETSLPE01E NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1
1.37E-04 2.58 0.00 R_NSPESDNFETSLPE01E NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1 0 0 0 0 R_NSPESDNFETSLPE01E NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1
5.38E-04 2.92 0.00 R_NSPESDNFETSLPE01E NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1 0 0 0 0 R_NSPESDNFETSLPE01E NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1
1.40E-03 3.22 0.00 R_NSPESDNFETSLPE01E NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1 0 0 0 0 R_NSPESDNFETSLPE01E NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1
2.59E-03 3.53 0.00 R_NSPESDNFETSLPE01E NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1 0 0 0 0 R_NSPESDNFETSLPE01E NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1
4.45E-03 3.79 0.00 R_NSPESDNFETSLPE01E NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1 0 0 0 0 R_NSPESDNFETSLPE01E NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1
6.74E-03 4.03 0.00 R_NSPESDNFETSLPE01E NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1 0 0 0 0 R_NSPESDNFETSLPE01E NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1
9.38E-03 4.25 0.00 R_NSPESDNFETSLPE01E NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1 0 0 0 0 R_NSPESDNFETSLPE01E NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1
1.84E-02 4.09 0.00 R_NSPESDNFETSLPE01E NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1 0 0 0 0 R_NSPESDNFETSLPE01E NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1
2.50E-02 3.95 0.00 R_NSPESDNFETSLPE01E NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1 0 0 0 0 R_NSPESDNFETSLPE01E NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1
3.07E-02 3.98 0.00 R_NSPESDNFETSLPE01E NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1 0 0 0 0 R_NSPESDNFETSLPE01E NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1
3.75E-02 3.88 0.00 R_NSPESDNFETSLPE01E NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1 0 0 0 0 R_NSPESDNFETSLPE01E NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1

Leakage is all zero's. but I made this as a starting point.

example_df <- function(intext) {
  tf <- tempfile()
  writeLines(intext, con = tf)
  require(tidyverse)
  as_tibble(read.delim(tf))
}
(df <- example_df("Amps	Volts	Leakage	macro	device	chip	group
1.63E-04	1.86	0	R_NSPESDNFETSLPE01E	NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1	0 0	0 0 R_NSPESDNFETSLPE01E NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1
1.13E-04	2.25	0	R_NSPESDNFETSLPE01E	NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1	0 0	0 0 R_NSPESDNFETSLPE01E NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1
1.37E-04	2.58	0	R_NSPESDNFETSLPE01E	NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1	0 0	0 0 R_NSPESDNFETSLPE01E NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1
5.38E-04	2.92	0	R_NSPESDNFETSLPE01E	NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1	0 0	0 0 R_NSPESDNFETSLPE01E NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1
1.40E-03	3.22	0	R_NSPESDNFETSLPE01E	NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1	0 0	0 0 R_NSPESDNFETSLPE01E NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1
2.59E-03	3.53	0	R_NSPESDNFETSLPE01E	NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1	0 0	0 0 R_NSPESDNFETSLPE01E NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1
4.45E-03	3.79	0	R_NSPESDNFETSLPE01E	NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1	0 0	0 0 R_NSPESDNFETSLPE01E NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1
6.74E-03	4.03	0	R_NSPESDNFETSLPE01E	NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1	0 0	0 0 R_NSPESDNFETSLPE01E NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1
9.38E-03	4.25	0	R_NSPESDNFETSLPE01E	NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1	0 0	0 0 R_NSPESDNFETSLPE01E NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1
1.84E-02	4.09	0	R_NSPESDNFETSLPE01E	NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1	0 0	0 0 R_NSPESDNFETSLPE01E NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1
2.50E-02	3.95	0	R_NSPESDNFETSLPE01E	NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1	0 0	0 0 R_NSPESDNFETSLPE01E NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1
3.07E-02	3.98	0	R_NSPESDNFETSLPE01E	NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1	0 0	0 0 R_NSPESDNFETSLPE01E NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1
3.75E-02	3.88	0	R_NSPESDNFETSLPE01E	NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1	0 0	0 0 R_NSPESDNFETSLPE01E NSG_NSP_W560_N16_DOP1p25_L80_WF35_1_1"))




library(plotly)
ax <- list(
  tickfont = list(color = "red"),
  overlaying = "x",
  side = "top",
  title = "second x axis"
)

df1 <- df %>% select(x=Volts,y=Amps)


df2 <- df %>% select(x=Leakage,y=Amps)


fig <- plot_ly()
fig <- fig %>% add_lines(x = df1$x, y = df1$y, name = "df1") #,line = list(shape = "spline"))
fig <- fig %>% add_lines(x = df2$x, y = df2$y, name = "df2", xaxis = "x2")
fig <- fig %>% layout(
  title = "Double Y Axis", xaxis2 = ax,
  xaxis = list(title="x")
)

fig

Thanks. It works. I had an issue with my dataframe in my earlier code.

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.

If you have a query related to it or one of the replies, start a new topic and refer back with a link.