我有以下df
library(Rlab)
q <- data.frame(v = seq(1,1000,1), w = round(rnorm(1000,500,200),2),
x = rbern(1000, 0.1),y = rbern(1000, 0.1), z = rbern(1000, 0.1))
當 x = 1 時,我想用顏色(比如藍色)在圖表上繪制“w”。當 y = 1 時,我想用顏色(比如紅色)在圖表上繪制“w”。當 z = 1 時,我想用顏色(比如綠色)在圖表上繪制“w”。當 x、y 或 z = 0 時,我不需要積分。如果它們重疊,我想要一個閃避(但沒有必要......)
我怎樣才能使用ggplot2做到這一點?特別是geom_point?
我只為一個“x”嘗試了以下操作,但它同時繪制了 1 和 0。
ggplot(q , aes (v,w,color = x)) geom_point()
提前致謝。
uj5u.com熱心網友回復:
我認為最好的方法是首先重塑(融化)資料集,否則您將看不到具有多種顏色的點。x根據您的描述,當說和y都是 1時,您需要多個點。
重塑為長形式(或melt在 data.table 語言中 ing )將為您的每一行創建三行,一個用于x,y和z。然后您可以只選擇 1 的那些行value(您要顯示的點)。該variable因子對應于x,y,z所以現在很容易設定您想要的顏色和閃避。
library(data.table)
setDT(q)
qlong <- melt(q, id.vars = c("v","w"))[value==1]
ggplot(qlong, aes(v,w,group=variable,color=variable))
geom_point(position=position_dodge2(width = .2))

uj5u.com熱心網友回復:
你可以使用case_when:
library(dplyr)
q <- q %>% mutate(color = factor(case_when(
x == 1 ~ "blue",
y == 1 ~ "red",
z == 1 ~ "green"), levels=c("blue","green","red")))
ggplot(q[!is.na(q$color),])
geom_point(aes(x=v,y=w,color=color))
scale_color_manual(values=c("blue","green","red"))
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/445452.html
