From 1b155da2302cabfefcd08921bdd95dd57e6667fb Mon Sep 17 00:00:00 2001 From: Natalie Clark Date: Wed, 8 Mar 2023 14:17:11 -0500 Subject: [PATCH] Version 1.1.4 - Fixed an issue with the one-sample and two-sample T-test. Previously, in the rare case where a protein was not detected in all samples in a certain group, any test comparisons involving that group would be erroneously discarded, which would cause an error when attempting to export the signed log-transformed p-values. Now, all test results are reported for all proteins: NAs are reported when a protein was excluded from a particular test. - Fixed an issue where exporting the RMarkdown report would fail when attempting to export the heatmap. - Fixed an issue where a GCT file with only one cdesc column could not be imported correctly. - Fixed some column descriptors in output GCT files. - Updated various help text within the app. --- description-column-headers.xlsx | Bin 0 -> 27754 bytes global.R | 4 +- server.R | 79 +++++++++++++++++++------------- src/helptext.R | 8 ++++ src/modT.R | 3 +- src/plots.R | 4 +- 6 files changed, 60 insertions(+), 38 deletions(-) create mode 100644 description-column-headers.xlsx diff --git a/description-column-headers.xlsx b/description-column-headers.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..bfa7e9ad35d257e16018c0b03add8714eae1f4ae GIT binary patch literal 27754 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­2AV9QSx?U|lv+s&2fq;G6?tJuq~ z4h;rqN9@nZ%}CY9(Fg0RWU*?*cB?Er&)bZkm$uhh5vyiS?yD(ZVII(y>(ge|ma5&| z*=Gh;l`_iT{z86cW{S4I3+S zXmdf%6;&=`+CQ3?kZOCjg}`OgfFIZk7A-D+EA6EGa&%1FD8EUD;%yk(PidxzI<&Iksn9PEvC>!>-b$ zYpKnpqspn?crC}xZ^ZP6wDE3E`Et6#BGs~23_Qvf3^;C945mMU{WA-G@ZOk?dv*X;Ov{tSXV+_$5A(rvoDtmop z2_8DGclcdY&TFtIV+V}o$L!_fRtw!hLI5s;+!8TqREx|=#tsMva+Fps76625;>|GL zqPEbEy5(C)*{DTYB&1@)BuzZrz}A^*r?X|K85l5DAKQ~(-co67Sr);RD~-y_Np?fcE+I^PKT zJ_C22hpF%#2G~oKF3*bp;PM~NOfQm(2twXYa26&YBm(_Ku+M6TnAJ z!G!@!QU#?3C~>O;u0zGen%$`hKSole%^)k&AS<>@5C zJp&{i`R0R*F-@&HZMq^Iy)CBpcV+nqG%~OADe{l~-weM#Ca7Dt-1W_A)zoZhVK^h) zLv<`VGFRShH5v`KbuJj%XV>T;w8TbLmm7UJk$)H~pjbr^(DLKNwIZcH&ZD^T2zj-4 zx}ot|w$wPb_%z`&tPQ0`x0_9^mDAIco1ZJC(%03L&5BfF@ha5}Zj3(&TYn6^j1B-^ z(*JsCbKyg0<5_HuK8m8;yifhX@+;{FgrBzIhd$;~J$ol6CwqO<&jc!kluPQ72JtHC zsM{+g^tqL=#`9}WfR|fsKVLf4>W-88nZ*l(wp|K&mU|TAcc18U>*I`TH^9uy_3gW# zq?^Zxj+f+pHKZD1{}xf0H3*C`IHCid2rr41+Sj~JkVCn6;i@Xl8jOqhcbBwxLExze$HTQ22o09bf+078e zJj-u{=Cv$I3eO-2H`*R(%H&?cQM+0|Gw*7FuAVD6Nye9O92kb!DX#2YgRbn?o3HF; zpF-@v?%Q~7wgMjS2Ulw0{`9lH?#i%I^UBX`y3yy7LCVc+Qn?LO(PpffEqQwJnM%_% zQk8L+xGh!h|H6Hc6#grWnhIAq&N6>GZqWxizKst!{wv;WSB60eS2#Q*uW-1MU*Rwf zzrq14@e9X>5cw}0RTNh^YLOw!>y39NdJ|eS~IhaUa2HJ5W>=)qit+rozCvdvL zk;Q$51C`(kM_AAmj%m?fI4o7ke&KKof-K)$8ROc{C!5;RlM^}Jbh=1WY(7D2)Nq>dI9rYKEh7H}rYnk?b^u(P~T0hL*TTh~p4<5mu6ooX1 zd705M*#EeH$n#^%J^2%(22fZ2500Fx7iK>9RT^&KaW;$#;)+TEyq3%zL3tq?h*}x0 zprmY;9_ey+H*ri-QeL?vNMYqDagj)rhDrotx8xY zDAnFEuW-fBUzFLd*Kq56ZmbHx$Y)!Sbe(lga&oegY{$^yR^W`7#F*Y``h0zy#B;Tp61KB5wK8b#w$<|5`INF@|GBOrRq%L zm*e3n9*SH^;S3ti8XO8ypRBfktXRpG$+Ul(yT+N(Hw@s$K)pC6rvbv#WUULJ0z+|J zuY}NLQqGns`*VrWvB;WJt?UrX=TNsH4+hzX5*GoW?VNs6^YH2w(c>E3d??xj5R`Oj z7O-GD0AoQ8Z}MK@<*PrYsZ59{L}hfxfm{{}{&Xj~uyko%ycu#E?B#7H;g^rDj{!Ub zU~z42eoz4ur*EpbvOVHx@%zJ;C!i64+C2^b=|8>a_r(_DpRaz8Mt*Wiwe?cYnlm?g z>uZ2dF^#}b3=$qCNVE@^t{z%g0|!(t8FiTs;5?<1eQNhZr&^ zs$Z~xxdk#o?|C@iLT)Mv&8ETH5m-yPnS`BGuEmZfZhJuyMv?OIHgb4#x6!Hjizt*_sF28EKu2~)P zT#UN%hxT(WlI;&FKQhO{{DCS9x_T2hefxMPo{)KCE>3K};8;`bu6ivJGQMsZllj6(i zfl{Qf?^e12g-#PO@iKr<)0H8r{=iLPA0Hj8P`@p(LL+&T*IawD!PPp*tHjg##v(g_ zXHL7K_?fNO1DYXs$qVS?BPJlC2q-J)e%mnL7EnYP8$ePj_q72QQMhk#l9yH-DB!sA zExY!Rgh2zjTMrt8JB8fwl&!eF=>{N*Zv6*ILZpC@{?Qf;I3 z8V(>XfIxxZ08;eNzlS(tF8K>3sK&oP7>JljdBxgMWXVz?PBv6GFTMUNw72Ko&65B=0kVl$6m=0)bA?^-;UZ zDkp%&x(XC_pD_?+Kwg0E^OCtx7!b^$!DZz`eh-lbqu-<K^6{wH_j0V#HRRIw4?@xvV2x3^X zahVGH`~wBD)b0_WcZNJp45&vi2+V}Q&a0#>8t=}K2|N+dG`lUO(91{zJ1)Q}5C*hd z!0r|YzB-KxffT0lmMWVmY$lrkeH-=!RwglD_ z2e5BtQ_KDgSvo|*{>z;FEAReAo zEIbRcl!s(0b1)pNRGh+MkeGNSO97Cozr44@7&He&g;(dYE2@C3B1)q~p&ZrMfY6?e zGrS-?98kCko=M5HpM$G{T}mM24#+Os4(_rPfJ1q+65U^SL?D6&7I6b5$Ywx2AP{2p zb$fF2q_X zreBd5M3mjYQc42^+&Y}jwE=|OlCBI;w8OZ}6=(!w=potyF}bWZ(CxNiND%?|k(b)b zxk-VFyAatQiF$!sN_ODhZH>IX%KQjA%L7=fD}B?OF`4|J1(dtbi<-( z_;ZwjrVi{MJEowqg_Z{h2g-U#5}{212p+28U_PMA_8%C66QR$7gaqzi;_ zA{&@5C^dsk5wzSOd&vJVC4cALRo(q$#9!;~zfQ>?yvrPnyJ}h}>4!m1_(Md*j0{~@ z`BGazo8Po0|595Z*1u^BxZwgPt_nj?p+v!hSX7_r+EE^4OP0#rd)3A-<68lCKT`5o zA#BfjRDV_&1jO$ZR`IjKs4ukz0^w3yY?_jaARGdYWvpO7#H5kRm75pHmc|9H*k=rA z(H|hMhpNlz*M9})%4YE;OCbIhiORL3zdTkMC?X`JBB&Ux)DMd1#Pk^+02^?TR$32K zRzPo{J9|E~d|km75L^B!2=ZVoZspjhz%s0z%gw&ut*bRXwmrPjmG7Wwg zR#+bcY#SgBC?TL1AwqoB&wzP>R{cL2UOnrIIiT&OZb707Va{*v{K*AKUHp4Pa1zh} zX1oQM&2cJQgOUx+_qUh=ms9RSu2R=+V9WuB8O(45LG$^8%M=tOT zHRV$dxf?pY7=RqR4w|ZfV-PqzF_jE@R2t&3Y#b5d$0}+zsL!hPq^F?rj1j7UEDIi`!dx}3Af()(tBSSAE za0MHzKQN4!Wp#D5{57L;uM;NUH!ci&^$ps{myd zL=yiS(0@qOU%k5`$5pHFFY@%i@D3vQosdD;W%KxT2MpPz;Q!B3^0(eW1RpG@-vl38 zuAt!mBai-dN-noENRn3-p7(%`%)<6Rl~TsUb_I*NS>-FxeplWZs)igGFKr3}RdQs3 zt~@BGTMOcBi~_{^a=-#q_Xf04h#Z5AW74r8rw6iqH`UA5Ch1pe)0__M&EP8F2(;=k06KU;z) zUkG5xxgInG_wMOG?cLB6fJFoPf2kdRh7F1g7+Gj@^&c35(zpRi<8OQS)r{f40{w5i z1C{aMPs(_;cmG$Q|Fw5liMmooD6b)V_a7tuZ$LxK@Snl}QAUubzbPYVdwGb0GU>lg z$=`VgQAV)%aITaQ4B6$R63V#0^600_YO5*2=E|NWC38SF0yH$M+o zP(L6N0j>>lG6dwLQ+O0G_ez=%}6Na@;9Sp5MwvyKC% zp4zgxV1L42Bb*GGrb1SMzHVM%KM6Vzvaiv#a$S#LI|HG90op%tuf|U7HCkKY?Qm_8RBNc@eOV9JU z5dQPy6HCvt{nZPEUmq(Ge%$r^6(gEQRH$o^Mu&oYDlMkVcavmdRt$_`4qc}H*Zq!` zPb%U+>o>qPG^#KJZg}VsKYGf2q{6x+>5s=6z@B(Yb+8k;F=8JXVtsnn(I6x4rrT9K zFc_Ovz%2iEad6@RlRX82ty!d`w|9!-ol}9gy*3Y@J~l2S637%!k+Ffnf1n&QBoRiG z&{wdkwG>#kwPrn4UaB)xwKDx^iYWJ(ZRHLhYmkSm9&BeKE%2>P^J0!`fm`Rtq|Mk& z&p1LmRbHs<(!Lh?!fH-@>s=l8%zY$sRNL+(0(+)KQgPRAq^>by_qScs?EQO$`M{Sp z|IOE?6`)S-eF45&)C%}&(SP`W7Zdoo)r5%g;BjI!pADKl080eT27B7;@a0A(zd_Q7A`bzQ;2Ce?tk$oA-20O;oVX zw)UCgh-$_g^s4VC>3F6%$AFJBhaBPa7~tZPweW;+iK~CGEg)v+^@i~YL01isJEs=%ManEIHLq45i)<`>tq)5zi-Ra^9h_vH=*?Ai~d{ozoNgfVY?Gp^i( zlO!?r_dj>nmn92DZdyHxJ@3DD7*8hk<6C>4PALjq1Ew1#D~ntDCj;x~FD=eo-8Q$a z$4)IAbsoJNdqKa2nHJb_ym?zY#p7WQ`Dz53imoueU-TA9+WBEaRjuL&o_2o;4dKeK zhfnu7Bh)_6ycrqhPUGd2<-gy2L7+}_NObkds>rZMNS}$(U>ecg1ngyG#!>{O_()a0 zQ_-nQj7>YPlb9$l5W+?2`WUcI3B9Qg=w8`+sG6=Du6$^B9rp&oq>hzcLv8)Z3%=WZ zjMgyC1^a&WXaYLo8|{*4adIlQa=!WjCG-!`>u{SnEtT%Kzzs0sS=Ku>+CH(Bj<;mL zzYb?P-kYa&k{p)SUL|+m{H3SEb#5{p_6y+imX{y>Dy0&amfMq|mF)RKqtYfJLsO#6 z)XS`@K-nSP^P)s*`__lFEJ-AZqx<)dsu{IKpX*6Jzw^eZAR{z7SqFCR`}pYhm?dlj zY@>{<=&!)4e^UWQ?Ea-8;0HW``alD|mRaBO*<%|^D_aI#D=U!sz!#YR|1V<(B9{;@ zCpX84*1SQp?)b(nTlSVavBsRrSVTm2uA&C?;YlG(xT-WWl1G#@KwgfPn})P zk49G(iyhSi!pt^bzm>HKOJz?j_fUP4z1|Z*L`rr;=jAQJTh_wp?8hhU6~U<=+wM|H z-AzK0XJ)shY9D-$5SLLQ7f;>9YxR6i)+ev@2KL9gb>Kq<3r7`A*V7qF>WpQ5^sEx9 zP8+if7zv1YEkk5rhgT|15?DVhN4prv+{UEtR(V>mBw%03bI(pP*nryFqPI?@Q!J5& z(_*OQ#phbPSMNUDp+4e#e1NFsW?CFp{@i&g?Hd|%=?2w@*f#AK#n)+sZ}q)gg8SO; zlU1Z8gul0erjskGufTNEM^`7fVs1=(S)D<=xw@G7op@ zR%`^*c3&Jx&noJ)3Ziv-Pgu~KbXxh;E+pl;*l1sDkqz&pjt!!fNHbXbpRqhXpz8b1 z6;X?OiqeVNH6n6AkmSo>lsyu0$|SeJ9Y=L^RJ#W)-amfS!tkCSNGXnHcYV*g)jyeb)WXC#z>K3zb~>_Q1(`b2$7&?mHD-Z&l6oSQNW| zZ>0I_Kg^Y!&+pu~{eCZN-*v5@49`>3vs^aGs3ugXFUidQvL|kt@suA2dJ@r4wE?=&v$L_e6*~1R_l*a-EBSZBe-{* z_$<9f(cmD{VfKV9btNlB*7*~@-CZfDV8O;JK(mHs&BV>Npq#IM^jO#r0pFYal>*706JayJ_^XSRhUh6Xa?rHszzR;6f zcW>oS7Hoy&li2lB#DE3lg;E9vbzo2eParP<9;;fCS`?gGQUW?(6`gOWmz0_J=BjVD zu%iU~hk7&DE^$#C5kc-I@udMUmBy5m@>zU2<G$d*)v_a;dsw6djg|yVx<743 zdyJAaN8$$KzDLu;Ggs9-)7_V{HC%Odi;&%1)60!Zo^QyCoU|?~wbDGb#phkpm&x%< zn-#mROj@opGr#C=eg*e&_wCYe|An53xOt`S&#zObU)rCodAOn|?Aq_gyIQ*4pFaLr zzk!$U<9yCPXWv^Z%g?+1YOP4LMStdN!B;yt*+1{-bq#r9t3GkJP~?<5O)k>{rrz0f zr~Jvh$(M9j>V6XK3|$h^s{1loa--nU%CM_~ukyA(-T61~tmE~MZ_Grh})^>v)tiIA>y3Sphg<+V)a#+`rZm9S)$8fS>mDihb+E?jwwLRH>w z?YvO9d+)oV#qF~=eJ>d`&U$hobS3BKLg|z1!k;}af7&?r_`+MRw{xu{3=fyt$MHGe z{_%4f&&+E+Q(gw zvD^ArqGChBcE0_p?{B?0`827BbBgLm@%y#^K77sm`}16P|Lya6dn)xeF0*mHyEnO8 zW_o(#Yxa+ediV^cq{KhcF4E(FI_27pNuRB!Oujn#`1D}wiCce^h_u^4~g35np`|qz$+;E=h>HYftS4-X0bIy!h0S!zd3m8~690m{5 zV&;KzV8($QT+GO%3p}J4`%Oo%k_tv+x%Vi*8`S{R>sMeJLG&76o<+Kh1zjWRl@!Pt zF9Q1mxG$(cHwXQK0)$E2z+)xQt}8&-jDC7MLbEmxSTo`*cXX}jhdv{;>I0902ijYV zegrhS3Ft@mAWYb-1U3Qv03UP%(9Z}#7|^T+_d324L(mOGKXLky`-#bPxD+{;5Z1+{IAFoS_1BY}Ydy`_w<8?{k_tXnr3NjI#Cg03CC&OsQ^ dn+o;% data.matrix fc <- rdesc[, logfc.colnames ] %>% data.matrix @@ -4489,6 +4487,7 @@ shinyServer( withProgress(message='Two-sample test', value=0, { count=0 + res.comb <- tab ## loop over groups for(g in unique(groups.comp)){ @@ -4504,16 +4503,24 @@ shinyServer( ## the actual test ############################# res.tmp <- modT.test.2class( tab.group, groups=groups.tmp, id.col=id.col, label=g , intensity=intensity)$output - - if(count == 0){ - res.comb <- res.tmp - } else { - ## make sure the order is correct - if(nrow(res.tmp ) != nrow(res.comb)) stop( "number of rows don't match!\n" ) - res.tmp <- res.tmp[rownames(res.comb), ] - ##res.comb <- cbind(res.comb, res.tmp) - res.comb <- data.frame(res.comb, res.tmp, stringsAsFactors=F) - } + #previous code would incorrectly throw away a test result if a feature was missing + # if(count == 0){ + # res.comb <- res.tmp + # } else { + # ## make sure the order is correct + # if(nrow(res.tmp ) != nrow(res.comb)) stop( "number of rows don't match!\n" ) + # #res.tmp <- res.tmp[rownames(res.comb), ] + # ##res.comb <- cbind(res.comb, res.tmp) + # res.comb <- data.frame(res.comb, res.tmp, stringsAsFactors=F) + # } + + + #create data frame of expression values and test results + res.test <- res.tmp[, !colnames(res.tmp)%in%colnames(res.comb)] + res.comb <- merge(res.comb,res.test,by="row.names",all=T) + rownames(res.comb) <- res.comb[,1] + res.comb <- res.comb[,-1] + ################################################## ## progress bar incProgress(count/length(unique(groups.comp)), detail=g) @@ -4546,7 +4553,7 @@ shinyServer( withProgress(message='One-sample T test', value=0, { count=0 - + res.comb <- tab ## loop over groups for(g in unique(groups.comp)){ @@ -4555,14 +4562,20 @@ shinyServer( colnames(tab.group)[1] <- id.col res.tmp <- modT.test( tab.group, id.col=id.col, plot=F, nastrings=NASTRINGS, label=g, na.rm=FALSE)$output - - if(count == 0){ - res.comb <- res.tmp - } else { - if(nrow(res.tmp ) != nrow(res.comb)) stop( "number of rows don't match!\n" ) - res.tmp <- res.tmp[rownames(res.comb), ] - res.comb <- cbind(res.comb, res.tmp) - } + #previous code would incorrectly throw away a test result if a feature was missing + # if(count == 0){ + # res.comb <- res.tmp + # } else { + # if(nrow(res.tmp ) != nrow(res.comb)) stop( "number of rows don't match!\n" ) + # res.tmp <- res.tmp[rownames(res.comb), ] + # res.comb <- cbind(res.comb, res.tmp) + # } + + #create data frame of expression values and test results + res.test <- res.tmp[, !colnames(res.tmp)%in%colnames(res.comb)] + res.comb <- merge(res.comb,res.test,by="row.names",all=T) + rownames(res.comb) <- res.comb[,1] + res.comb <- res.comb[,-1] ############################################# ## update progress bar @@ -4585,6 +4598,7 @@ shinyServer( res.comb <- data.frame(id=res.id, res.test, res.exprs, stringsAsFactors=F) ##res.comb <- res.comb[tab[, id.col], ] res.comb <- res.comb[rownames(tab),] + } ################################## @@ -7073,7 +7087,6 @@ shinyServer( plotHM(res=res, hm.rownames=hm.rownames, grp=grp.hm, grp.col=global.param$grp.colors, grp.col.legend=global.param$grp.colors.legend, hm.clust=input$hm.clust, hm.title=hm.title, hm.scale=input$hm.scale, cellwidth=cw, fontsize_row=input$cexRow, fontsize_col=input$cexCol, style=global.param$which.test, anno.col=anno.col, anno.col.color=anno.col.color, show.rownames=input$hm.show.rownames, show.colnames=input$hm.show.colnames, height=min( dynamicHeightHM( nrow(global.results$filtered)), 1200 ), width=dynamicWidthHM(length(global.param$grp))) - }) } }, diff --git a/src/helptext.R b/src/helptext.R index 2f9b567..4ecd9b9 100644 --- a/src/helptext.R +++ b/src/helptext.R @@ -32,6 +32,14 @@ printHTML <- function(input, output, session, what, error=NULL, global.input=NUL if(what == 'cl'){ txt <- '

What\'s new?

+v1.1.4 March 7, 2023\ +
    +
  • Fixed an issue with the one-sample and two-sample T-test. Previously, in the rare case where a protein was not detected in all samples in a certain group, any test comparisons involving that group would be erroneously discarded, which would cause an error when attempting to export the signed log-transformed p-values. Now, all test results are reported for all proteins: NAs are reported when a protein was excluded from a particular test. +
  • Fixed an issue where exporting the RMarkdown report would fail when attempting to export the heatmap. +
  • Fixed an issue where a GCT file with only one cdesc column could not be imported correctly. +
  • Fixed some column descriptors in output GCT files. +
  • Updated various help text within the app. +
v1.1.3 February 8, 2023\
  • Occasionally, eBayes(trend=TRUE) fails for intensity-based data, particularly when the distribution of quantified features is not uniform across samples. In these cases, eBayes(trend=FALSE) is run instead, and a warning message is printed. We highly encourage users who encounter this warning to carefully examine their data, and re-perform statistical analysis as needed. Typically, setting a stricter missing value filter will fix the issue. diff --git a/src/modT.R b/src/modT.R index bac4998..3616a73 100644 --- a/src/modT.R +++ b/src/modT.R @@ -132,6 +132,7 @@ modT.test <- function (d, output.prefix, id.col=NULL, data.col=NULL, fix.id=FALS ##colnames (mod.t)[1] <- id.col # retain id.col (if provided) ##rownames(mod.t) <- make.unique( as.character(mod.t[,1]), sep='_' ) rownames(mod.t) <- id + final.results <- mod.t cat('\n-- modT.test exit --/n') @@ -274,7 +275,7 @@ moderated.t <- function (data, design=NULL, intensity=FALSE) { m <- lmFit (data.matrix, method='robust') ##cat('here3 ') #one-sample t-test is only run for ratio data - m <- eBayes (m, robust=TRUE) + m <- eBayes (m, trend=FALSE, robust=TRUE) ##at('here4 ') sig <- topTable (m, number=nrow(data), sort.by='none') ##cat('here5 ') diff --git a/src/plots.R b/src/plots.R index 75e00b3..d892fb0 100644 --- a/src/plots.R +++ b/src/plots.R @@ -741,9 +741,9 @@ makeBoxplotly <- function(tab, id.col, grp, grp.col, verbose=T, title='boxplot') ########################################## ## plot - p <- plot_ly(tab, x=tab[, 1], type='box', name=colnames(tab)[1], marker = list(color = grp.col[1]), line=list( color=grp.col[1]), hoverinfo='name+x', hoverlabel=list(namelength=STRLENGTH) ) + p <- plot_ly(tab, x=tab[, 1], type='box', name=colnames(tab)[1], color=list(color = grp.col[1]), marker = list(color = grp.col[1]), line=list( color=grp.col[1]), hoverinfo='name+x', hoverlabel=list(namelength=STRLENGTH) ) for(i in 2:ncol(tab)) - p <- p %>% add_trace(x=tab[, i], name=colnames(tab)[i], marker=list(color = grp.col[i] ), line=list( color=grp.col[i])) + p <- p %>% add_trace(x=tab[, i], name=colnames(tab)[i], color=list(color = grp.col[i]), marker=list(color = grp.col[i] ), line=list( color=grp.col[i])) p <- p %>% layout(showlegend = FALSE, title=title, yaxis=list(visible=T) )# %>% yaxis(visible=F) return(p) }