plotly.R icon indicating copy to clipboard operation
plotly.R copied to clipboard

Legend "entrywidth" and "entrywidthmode" parameters appear to be ignored when knitting Rmd to HTML

Open ctuni opened this issue 3 years ago • 1 comments

I'm trying to use plotly to plot several stacked barplots of the same size each. Each barplot has legend elements of increasing size, and I would like to set the dimensions of the legend box, instead of the legend box being the size of the longest legend element. I've found the parameters entrywidth and entrywidthmode and tried using them to set this graphic setting, but the plots look exactly the same independently on what values I use.

The data looks like this:

> head(rel_table_filtered)
                                Class Relative_frequency  Sample
3      Bacteria;Bacteria;Unclassified        0.001547047 ileum_A
4  Bacteria;Bacteria;Actinobacteriota        0.137521410 ileum_A
5      Bacteria;Bacteria;Bacteroidota        0.111055859 ileum_A
8  Bacteria;Bacteria;Desulfobacterota        0.011989613 ileum_A
9        Bacteria;Bacteria;Firmicutes        0.707497652 ileum_A
11   Bacteria;Bacteria;Proteobacteria        0.025857782 ileum_A

The function simplified function I'm using to plot the barplots is the following. Wheter I put 0.9, 0.5, 1/8, etc, on the entrywitdthmode parameter, the plot looks the same. I've also tried with autosize=FALSE and with height and width parameters on the plot_ly function, without success.

fig <- plot_ly(rel_table_filtered, type = "bar", y = ~Sample, x= ~Relative_frequency, color = ~Class, orientation = "h") %>%
    layout( barmode = 'stack', xaxis = list(title = ''), yaxis = list(title = '%'), autosize = T, legend = list(entrywidthmode = "fraction", entrywidth = 0.9), hoverlabel = list(namelength=-1) )

fig

image

I'm attaching the rel_table_filtered.csv file: rel_table_filtered.csv

Thanks in advance!

ctuni avatar Dec 22 '22 11:12 ctuni

I might have found something that is related to this problem: When you do plotly::schema() and look for "entrywidth" you see that there is no such entry. So maybe it does not get translated to the javascript object and gets thus ignored? I am not an expert though. And when I look at the plot p using plotly::plotly_build(p) |> listviewer::jsonedit() I can actually see that the created object contains entrywidth, so the problem might as well be somewhere else.

Noskario avatar Mar 13 '25 17:03 Noskario