Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Vertical Plot #45

Open
smk508 opened this issue Oct 8, 2020 · 5 comments
Open

Vertical Plot #45

smk508 opened this issue Oct 8, 2020 · 5 comments

Comments

@smk508
Copy link

smk508 commented Oct 8, 2020

Hi, I'm wondering if it's possible to make vertically oriented plots using this library? Specifically, I am trying to do something like in this example except having the plot oriented vertically for a figure.

@veghp
Copy link
Member

veghp commented Oct 10, 2020

Hi, not out of the box I'm afraid. If it is a one-off, then the fastest way is to save as SVG:
ax.figure.savefig("from_genbank.svg")
Then open in Inkscape or another vector editor, then select each label and rotate 90 degrees (Object >> Transform >> Rotate >> Apply to each object separately >> Apply).

The algorithm in DNA Features Viewer finds the minimum number of levels that allows plotting the labels without overlap, and this works well and simple when the height of the levels, that is, the height of the letters, are the same. If the rotated labels were implemented, then you would get very wide plots, or overlaps as in the example below.

Was something like this below your intended outcome?

from_genbank svg

@Zulko
Copy link
Member

Zulko commented Oct 10, 2020

In theory it is also possible to ask matplotlib to flip an ax by 90deg (all features and texts will appear vertically) but it is not straightforward. If that would work for you, see this stackoverflow answer as a starting point.

@smk508
Copy link
Author

smk508 commented Oct 12, 2020

I'll look into that, thanks. Yeah I was hoping there would be something that could be baked in to the plot automatically, so if I'm making a multi-axis plot, it's easy to scale everything. I basically wanted to show a heatmap depicting SNPs by patient and have a genome track to visualy depict the position. If I can't get the rotate axis trick to work, I'll try saving as an image or making the figure work horizontally.

@Casperjamin
Copy link

I would also be interested in this.
I am currently trying to visualise a 350kb segment with ~50 elements of interest and the labels start to stack up really high.
I believe this could be circumvented using a vertical plot

@veghp
Copy link
Member

veghp commented Jul 23, 2021

Thanks for the feedback. As for implementing this, I estimate it would be a significant re-write or addition: make vertical plots natively, then update compute_features_levels with an option to compute horizontal levels, which uses label width as level height -- and conversely use the constant text height for determining collisions. Alternatively, there could be a constant level height, but that likely leads to label overlaps (collisions).

Another option may be flipping the image as mentioned above, but I don't know how well that would work.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants