亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在雙Y軸ggplot中使用構面

如何在雙Y軸ggplot中使用構面

小怪獸愛吃肉 2019-10-10 14:32:45
我一直在嘗試從此處擴展場景以利用構面(尤其是facet_grid())。我已經看到了這個例子,但是我似乎無法得到它為我的工作geom_bar()和geom_point()組合。我嘗試使用示例中的代碼,只是從更改為facet_wrap,facet_grid這似乎也使得第一層未顯示。我是網格和雜項方面的新手,因此,如果有人可以給出一些指導,使P1在y軸左方顯示,P2在y軸右方顯示,那會很棒。數據library(ggplot2)library(gtable)library(grid)library(data.table)library(scales)grid.newpage()dt.diamonds <- as.data.table(diamonds)d1 <- dt.diamonds[,list(revenue = sum(price),                        stones = length(price)),                  by=c("clarity","cut")]setkey(d1, clarity,cut)p1和p2p1 <- ggplot(d1, aes(x=clarity,y=revenue, fill=cut)) +  geom_bar(stat="identity") +  labs(x="clarity", y="revenue") +  facet_grid(. ~ cut) +  scale_y_continuous(labels=dollar, expand=c(0,0)) +   theme(axis.text.x = element_text(angle = 90, hjust = 1),        axis.text.y = element_text(colour="#4B92DB"),         legend.position="bottom")p2 <- ggplot(d1, aes(x=clarity, y=stones, colour="red")) +  geom_point(size=6) +   labs(x="", y="number of stones") + expand_limits(y=0) +  scale_y_continuous(labels=comma, expand=c(0,0)) +  scale_colour_manual(name = '',values =c("red","green"), labels = c("Number of Stones"))+  facet_grid(. ~ cut) +  theme(axis.text.y = element_text(colour = "red")) +  theme(panel.background = element_rect(fill = NA),        panel.grid.major = element_blank(),        panel.grid.minor = element_blank(),        panel.border = element_rect(fill=NA,colour="grey50"),        legend.position="bottom")嘗試組合(基于上面鏈接的示例) 這在第一個for循環中失敗,我懷疑對geom_point.points進行了硬編碼,但是我不知道如何使其適合我的圖表(或者足夠靈活以適合各種
查看完整描述

3 回答

?
慕尼黑5688855

TA貢獻1848條經驗 獲得超2個贊

現在ggplot2有了輔助軸支持,這在許多(但不是全部)情況下變得容易得多。無需雜項操作。


即使只允許對相同數據進行簡單的線性變換(例如,不同的測量范圍),我們也可以首先手動重新縮放其中一個變量,至少可以從該屬性中獲得更多收益。


library(tidyverse)


max_stones <- max(d1$stones)

max_revenue <- max(d1$revenue)


d2 <- gather(d1, 'var', 'val', stones:revenue) %>% 

  mutate(val = if_else(var == 'revenue', as.double(val), val / (max_stones / max_revenue)))


ggplot(mapping = aes(clarity, val)) +

  geom_bar(aes(fill = cut), filter(d2, var == 'revenue'), stat = 'identity') +

  geom_point(data = filter(d2, var == 'stones'), col = 'red') +

  facet_grid(~cut) +

  scale_y_continuous(sec.axis = sec_axis(trans = ~ . * (max_stones / max_revenue),

                                         name = 'number of stones'),

                     labels = dollar) +

  theme(axis.text.x = element_text(angle = 90, hjust = 1),

        axis.text.y = element_text(color = "#4B92DB"),

        axis.text.y.right = element_text(color = "red"),

        legend.position="bottom") +

  ylab('revenue')

http://img1.sycdn.imooc.com//5d9ed0c700011a4a23651071.jpg

它也可以很好地與facet_wrap


http://img1.sycdn.imooc.com//5d9ed0d80001cbde23651531.jpg

其他并發癥,例如scales = 'free'space = 'free'也很容易做到。唯一的限制是,對于所有構面,兩個軸之間的關系均相等。


查看完整回答
反對 回復 2019-10-10
?
天涯盡頭無女友

TA貢獻1831條經驗 獲得超9個贊

我認為對于一定范圍的數據集(例如diamonds),它scales = 'free'會起作用,但是我嘗試使用該樣本集來反映我的一些真實世界數據的樣本集,但我無法y-left適當縮放。有什么想法嗎?d1 <- data.table(Group = c(rep("A", 4), rep("B", 4)), xaxis = c("a","b","c","d"), yleft = c(100,90,50,40, 40,35,30,10), yright = c(.2,.08,.02,.02, .25,.1,.03,.02))

查看完整回答
反對 回復 2019-10-10
  • 3 回答
  • 0 關注
  • 990 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號