ggplot 中的轴变换 - 如何更改特定间隔的比例?

Axis tranformation in ggplot - How do I change the scale on a specific interval?

我做了一个小提琴情节,看起来像这样:

正如我们所见,大部分数据位于分数为 0.90-0.95 的区域附近。我想要的是通过改变从 0 到 0.75 的 less space 评级的比例来关注 0.75 到 1.00 的区间。
有办法吗?

这是我目前用来创建小提琴情节的代码:

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")

您可以使用 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")

虽然可以将比例尺转换为更多地关注上部区域(例如添加 trans = "exp" 作为比例尺的参数),但非线性比例尺通常很难正确解释。

对于此类用例,我推荐 ggforce 包中的 facet_zoom,它几乎就是为此目的而构建的(参见小插图 here)。

我还从 ggstance 包中从 geom_violin() + coord_flip() 切换到 geom_violinh,它通过提供翻转版本的 ggplot 组件扩展了 ggplot2。下面的模拟数据示例:

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

模拟题中数据特征的样本数据:

df <- diamonds[, c("color", "price")]
df$rating <- (max(df$price) - df$price) / max(df$price)
df$year <- df$color