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

Fill specific points #5

Open
dylanmr opened this issue Aug 15, 2019 · 4 comments
Open

Fill specific points #5

dylanmr opened this issue Aug 15, 2019 · 4 comments

Comments

@dylanmr
Copy link

dylanmr commented Aug 15, 2019

Hi!

Thanks for this great package. Is it possible to use theme_combmatrix to fill different points with different colors? I currently can only figure out how to change all points to a single color.

I have tried giving multiple colors here but it doesnt seem to work:

ggplot(resglia, aes(x=Celltype)) + geom_bar(fill=c(rep("black",5),"red", rep("black",4))) + theme_pubr() + scale_x_upset(n_intersections = 10) + theme_combmatrix( combmatrix.panel.point.color.fill = c(rep("black",5),"red", rep("black",4)))
image

Thanks,
Dylan

@const-ae
Copy link
Owner

Hi Dylan,
no sorry, right now there is now way to specifically change the color of points in the combination matrix individually. Right now, the best you can do is to either fork the package and modify the make_combination_matrix_plot() function or use a tool like Illustrator to modify the plot manually afterwards.

The problem is that I didn't yet come up with a good user interface to specify such styling. Simply using a vector of colors feels "untidy" to me. But I realize that this might be a useful feature, so if you (or anyone else who reads this) has suggestions how to implement this, I would be happy to hear them.

Best, Constantin

@krassowski
Copy link

@const-ae I just added highlights to ComplexUpset. The end result allows for things like this:
image

And the user-interface for the above plot is:

    queries=list(
        upset_query(
            intersect=c('Drama', 'Comedy'),
            color='red',
            fill='red',
            only_components=c('intersections_matrix', 'Intersection size')
        ),
        upset_query(
            set='Drama',
            fill='blue'
        ),
        upset_query(
            intersect=c('Romance', 'Comedy'),
            fill='yellow',
            only_components=c('Length')
        )
    )

More description is at the very end of the examples notebook. I was aiming to make my interface similar to what UpSetR does, but improve some aspects as well. It is a bit hacky but works well for me. The relevant commits are here and here.

Feel free to take inspiration from my implementation - hope it will benefit your package too!

@eggrandio
Copy link

Hi Dylan,
no sorry, right now there is now way to specifically change the color of points in the combination matrix individually. Right now, the best you can do is to either fork the package and modify the make_combination_matrix_plot() function or use a tool like Illustrator to modify the plot manually afterwards.

The problem is that I didn't yet come up with a good user interface to specify such styling. Simply using a vector of colors feels "untidy" to me. But I realize that this might be a useful feature, so if you (or anyone else who reads this) has suggestions how to implement this, I would be happy to hear them.

Best, Constantin

Hi Constantin,

Is there any update on this? I was wondering if I could "hack" the make_combination_matrix_plot() function as you mentioned and include a custom color vector to change specific point colors. I assume I could introduce the vector at the lines.

 scale_color_manual(values= c(`TRUE` = theme$combmatrix.panel.point.color.fill,
                             `FALSE` = theme$combmatrix.panel.point.color.empty)) +

Would changing the "TRUE" to a vector cycle through the vector values for each point?

@const-ae
Copy link
Owner

Hi eggrandio,

sorry no update on this. I think the best way to achieve this is still to fork the package and modify the make_combination_matrix_plot() function. It actually shouldn't be too difficult to do this for a specific use case, because you could modify the df2 data.frame and use a new column instead of observed as the color value of geom_point():

Maybe something along the lines of

... 

df2 $highlighted_points <- ifelse(.data$observed, "observed", 'missing")
df2 $highlighted_points[index_of_special_points] <- "special"

... 

plt <- plt +
    geom_point(aes(color= .data$highlighted_points), size=theme$combmatrix.panel.point.size)

...

Best,
Constantin

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