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

时间:2019-04-19 13:34:00

标签: r ggplot2 violin-plot

我制作了一个小提琴图,如下所示:

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 :(得分:0)

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

答案 1 :(得分:0)

虽然可以将比例尺转换为更多地集中在上方区域(例如,将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

plot

模拟问题数据的样本数据:

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