Git Product home page Git Product logo

Comments (7)

teunbrand avatar teunbrand commented on May 25, 2024 1

Hi there, thanks for the report! To be clear, both axes have left-aligned text, it is just that there is additional space on the bottom axes due to misalignment with the top axis.

The issue occurs because the two guides are drawn independently of oneanother, unaware of dimensions of other axes in the same direction. Having dabbled a bit in the guide code, I can say with some confidence that it'll not be straightforward to line up the labels.

from ggplot2.

teunbrand avatar teunbrand commented on May 25, 2024 1

@smouksassi I think the intent is to change the 'whitespace' area for the lower series of axis labels from left to right w.r.t the labels. That'd left-align all the y-axis labels. Like the following picture that I have expertly edited using MS paint:

@ujtwr please correct me if I'm misinterpreting the request

from ggplot2.

ujtwr avatar ujtwr commented on May 25, 2024

For example, when moving the label of a panel to the left side, I would like the Y-axis text to align along the panel.

tibble(
  F = c(rep("F1", 3), rep("F2", 3)),
  Y = c("AAAAAAAAAAAAAAAAAAA", "BBBBB", "CCCCCCCCC", "DDDDD", "EEEEEEEE", "FFF"),
  Cnt = c(10, 20, 30, 50, 40 ,60)
) %>% 
  ggplot(mapping = aes(y = Y, x = Cnt)) +
  geom_col() +
  facet_grid(
    rows = vars(F),
    scales = "free_y",
    switch = "y"
  ) +
  theme(
    axis.text.y = element_text(hjust = 0),
    strip.text.y.left = element_text(angle = 0),
    strip.placement = "outside"
  )

image

from ggplot2.

teunbrand avatar teunbrand commented on May 25, 2024

Thanks, the intent is clear πŸ‘ It is implementation-wise that this could be tricky.

from ggplot2.

smouksassi avatar smouksassi commented on May 25, 2024

in your case patchwork can help you doing what you want

library(patchwork)
library(ggplot2)
library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union

dataggplot <- tibble(
  F = c(rep("F1", 3), rep("F2", 3)),
  Y = c("AAAAAAAAAAAAAAAAAAA", "BBBBB", "CCCCCCCCC", "DDDDD", "EEEEEEEE", "FFF"),
  Cnt = c(10, 20, 30, 50, 40 ,60)
) 
a1 <-   ggplot(dataggplot %>% 
           filter(F=="F1"),
         mapping = aes(y = Y, x = Cnt)) +
  geom_col() +
  facet_grid(
    rows = vars(F),
    scales = "free_y",
    switch = "y"
  ) +
  theme(
    axis.text.y = element_text(hjust = 0),
    strip.text.y.left = element_text(angle = 0),
    strip.placement = "outside"
  )+
  coord_cartesian(xlim=c(NA,60))+
  theme(axis.title.x = element_blank(),axis.ticks.x.bottom = element_blank(),
        axis.text.x.bottom = element_blank())
a2 <- ggplot(dataggplot %>% 
         filter(F=="F2"),
       mapping = aes(y = Y, x = Cnt)) +
  geom_col() +
  facet_grid(
    rows = vars(F),
    scales = "free_y",
    switch = "y"
  ) +
  theme(
    axis.text.y = element_text(hjust = 0),
    strip.text.y.left = element_text(angle = 0),
    strip.placement = "outside"
  )+
  coord_cartesian(xlim=c(NA,60))

a1/a2 +
  plot_layout(axis_titles = "collect_y")

Created on 2024-04-04 with reprex v2.1.0

from ggplot2.

smouksassi avatar smouksassi commented on May 25, 2024

a quick fix would be to manually pad with spaces until you have a simiar strwidth
this is not a solution but prevent you form needing to manually edit your plot

library(stringr)
library(ggplot2)
library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union


dataggplot <- tibble(
  F = c(rep("F1", 3), rep("F2", 3)),
  Y = c("AAAAAAAAAAAAAAAAAAA", "BBBBB", "CCCCCCCCC", "DDDDD", "EEEEEEEE",
        "FFF                                       "),
  Cnt = c(10, 20, 30, 50, 40 ,60)
) %>% 
  mutate(Ypad= stringr::str_pad(Y, width = 20, side = "right",pad=" ",use_width=FALSE))

strwidth(dataggplot$Y)
#> Error in strwidth(dataggplot$Y): plot.new has not been called yet

ggplot(dataggplot,
               mapping = aes(y = Y, x = Cnt)) +
  geom_col() +
  facet_grid(
    rows = vars(F),
    scales = "free_y",
    switch = "y"
  ) +
  theme(text = element_text(size=16),
    axis.text.y = element_text(hjust = 0),
    strip.text.y.left = element_text(angle = 0),
    strip.placement = "outside"
  )

Created on 2024-04-04 with reprex v2.1.0

from ggplot2.

ujtwr avatar ujtwr commented on May 25, 2024

@smouksassi
Thank you for the suggestion. I have already tried it, but I'm a Japanese user, so sometimes there can be misalignment when padding with white spaces.

from ggplot2.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.