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

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

如何在ggplot中合并顏色,線條樣式和形狀圖例

如何在ggplot中合并顏色,線條樣式和形狀圖例

慕蓋茨4494581 2019-10-30 10:03:50
假設我在ggplot中有以下圖表:ggplot圖它是使用以下代碼生成的:x <- seq(0, 10, by = 0.2)y1 <- sin(x)y2 <- cos(x)y3 <- cos(x + pi / 4)y4 <- sin(x + pi / 4)df1 <- data.frame(x, y = y1, Type = as.factor("sin"), Method = as.factor("method1"))df2 <- data.frame(x, y = y2, Type = as.factor("cos"), Method = as.factor("method1"))df3 <- data.frame(x, y = y3, Type = as.factor("cos"), Method = as.factor("method2"))df4 <- data.frame(x, y = y4, Type = as.factor("sin"), Method = as.factor("method2"))df.merged <- rbind(df1, df2, df3, df4)ggplot(df.merged, aes(x, y, colour = interaction(Type, Method), linetype = Method, shape = Type)) + geom_line() + geom_point()我只希望有一個圖例可以正確顯示形狀,顏色和線型(interaction(類型,方法)圖例最接近我想要的圖例,但它沒有正確的形狀/線型) 。我知道如果我使用scale_xxx_manual并且為所有圖例指定了相同的標簽,那么它們將被合并,但是我不想手動設置標簽:如果有新的Method或Types,我不想擁有修改我的代碼:想要一些通用的東西。編輯如以下答案所示,在這種特殊情況下,有幾種方法可以完成工作。所有建議的解決方案都需要使用scale_xxx_manual functions或with guides函數手動設置圖例線的類型和形狀。但是,建議的解決方案在一般情況下仍然不起作用:例如,如果我使用新的“ method3”方法向數據集添加新的數據框,則該方法不再起作用,我們必須手動添加新的圖例形狀和線型:y5 <- sin(x - pi / 4)df5 <- data.frame(x, y = y5, Type = as.factor("sin"), Method = as.factor("method3"))df.merged <- rbind(df1, df2, df3, df4, df5)override.shape <- c(16, 17, 16, 17, 16)override.linetype <- c(1, 1, 3, 3, 4)g <- ggplot(df.merged, aes(x, y, colour = interaction(Type, Method), linetype = Method, shape = Type)) + geom_line() + geom_point()g <- g + guides(colour = guide_legend(override.aes = list(shape = override.shape, linetype = override.linetype)))g <- g + scale_shape(guide = FALSE)g <- g + scale_linetype(guide = FALSE)print(g)這給出:5條曲線現在的問題是:如何自動生成override.shape和override.linetype向量?請注意,向量大小為5,因為我們有5條曲線,而interaction(Type, Method)因子的大小為6(我沒有cos / method3組合的數據)
查看完整描述

3 回答

?
白衣非少年

TA貢獻1155條經驗 獲得超0個贊

前幾天我遇到了這個問題。圖例中的R Cookbook部分說明:


如果同時使用顏色和形狀,則都需要為其指定比例尺規格。否則,將有兩個兩個單獨的圖例。


在您的情況下,您需要shape和的規格linetype。


編輯


使用相同的數據創建形狀顏色和線條非常重要,我通過直接定義列來組合了您的交互階段。而不是scale_linetype_discrete創造傳奇,我用scale_linetype_manual指定的值,因為它們將在四個不同的值,默認情況下。


如果您想要所有可能的形狀和線型的詳細布局,請訪問R Graphics網站以查看所有數字標識符:


df.merged$int <- paste(df.merged$Type, df.merged$Method, sep=".")


ggplot(df.merged, aes(x, y, colour = int, linetype=int, shape=int)) +

  geom_line() +

  geom_point() +

  scale_colour_discrete("") +

  scale_linetype_manual("", values=c(1,2,1,2)) +

  scale_shape_manual("", values=c(17,17,16,16))


查看完整回答
反對 回復 2019-10-30
?
富國滬深

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

labs()對于定義幾何圖形外觀的所有美學使用并設置相同的值。


library('ggplot2')

ggplot(iris) + 

  aes(x = Sepal.Length, y = Sepal.Width, 

      color = Species, linetype = Species, shape = Species) +

  geom_line() +

  geom_point() +

  labs(color  = "Guide name", linetype = "Guide name", shape = "Guide name")


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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