Преобразование оси в ggplot - Как изменить масштаб на определенном интервале? - PullRequest
0 голосов
/ 19 апреля 2019

Я сделал сюжет для скрипки, который выглядит следующим образом:

Violin plot of credit ratings

Как мы видим, большая часть данных находится вблизи региона, где оценка составляет 0,90-0,95. Я хочу сосредоточиться на интервале от 0,75 до 1,00, изменив шкалу, оставляя меньше места для оценок от 0 до 0,75.
Есть ли способ сделать это?

Это код, который я сейчас использую для создания скрипки:

ggplot(data=Violin_plots, aes(x = Year, y = Score)) +
  geom_violin(aes(fill = Violin_plots$Year), trim = TRUE) +
  coord_flip()+ 
  scale_fill_brewer(palette = "Blues") +   
  theme(legend.position = 'none') + 
  labs(y = "Rating score", 
       fill = "Rating year", 
       title = "Violin-plots of credit rating scores")

Ответы [ 2 ]

0 голосов
/ 19 апреля 2019

Несмотря на то, что можно преобразовать масштаб, чтобы больше фокусироваться в верхней области (например, добавить trans = "exp" в качестве аргумента для масштаба), нелинейную шкалу часто трудно интерпретировать соответствующим образом.

Для такихВ случаях использования я рекомендую facet_zoom из пакета ggforce, который в значительной степени построен именно для этой цели (см. виньетка здесь ).

Я также переключился с geom_violin() + coord_flip() на geom_violinh из пакета ggstance, который расширяет ggplot2, предоставляя перевернутые версии компонентов ggplot.Пример с смоделированными данными ниже:

library(ggforce) # for facet_zoom
library(ggstance) # for flipped version of geom_violin

ggplot(df,
       aes(x = rating, y = year, fill = year)) +
  geom_violinh() + # no need to specify trim = TRUE as it's the default
  scale_fill_brewer(palette = "Blues") +   
  theme(legend.position = 'none') +
  facet_zoom(xlim = c(0.75, 0.98)) # specify zoom range here

plot

Пример данных, которые имитируют характеристики данных в вопросе:

df <- diamonds[, c("color", "price")]
df$rating <- (max(df$price) - df$price) / max(df$price)
df$year <- df$color
0 голосов
/ 19 апреля 2019

Вы можете создать второй график для увеличения исходного графика без изменения данных, используя ggplot2::coord_cartesian()

ggplot(data=Violin_plots, aes(x=Year,y=Score*100)) + 
geom_violin(aes(fill=Violin_plots$Year),trim=TRUE) + 
coord_flip() + 
coord_cartesian(xlim = c(0.75, 1.00)) +
scale_fill_brewer(palette="Blues") +
theme(legend.position='none') +
labs(y="Rating score",fill="Rating year",title="Violin-plots of credit rating scores")
...