【发布时间】:2019-11-12 08:54:57
【问题描述】:
以下代码使用 plot() 函数运行高度与体重的 2D 散点图,其中根据 Class 值是否为 1、2 将点分类为“Good”、“Fair”、“Poor”或 3,分别。 “好”的点是亮绿色,“一般”,橄榄绿色和差,红色。所有点的大小相同(pch=19)。是否可以为每个数据点设置不同的大小和透明度,具体取决于“组”列中每个点的分配情况:不透明和小尺寸点、半透明和中型点或 100% 透明和大尺寸点. 感谢您的想法!
df
# Group Class Height Weight
# 1 Opaque small 1 0.831777874 0.859223152
# 2 Semi-transprnt med 2 0.751019511 0.807521752
# 3 Semi-transprnt med 1 0.751019511 0.807521752
# 4 Transprnt large 3 0.527390539 0.599957241
# 5 Transprnt large 3 0.527390539 0.599957241
color <- c(rgb(0, 1, 0, 1), rgb(0.5, 0.5, 0), rgb(1, 0, 0))
plot(x=c(0.0, 0.5, 0.5, 0.0, 0.0), y=c(0.0, 0.0, 0.5, 0.5, 0.0),
type='l', col='gray', lwd=2,xlab='Height', ylab='Weight',
xlim=c(1,0), ylim=c(1, 0))
par(new=T)
plot(x=c(0.0, 0.5, 0.5, 0.0, 0.0), y=c(0.5, 0.5, 1, 1, 0.5),
type='l', col='gray', lwd=2, xlab='', ylab='',
xlim=c(1, 0.0), ylim=c(1, 0.0), axes=F)
par(new=T)
plot(x=c(0.5, 1, 1, 0.5, 0.5), y=c(0.0, 0.0, 0.5, 0.5, 0.0),
type='l', col='gray', lwd=2,
xlab='', ylab='', xlim=c(1, 0.0), ylim=c(1, 0.0), axes=F)
par(new=T)
plot(x=c(0.5, 1, 1, 0.5, 0.5), y=c(0.5, 0.5, 1, 1, 0.5), type='l',
col='gray', lwd=2, xlab='', ylab='',
xlim=c(1, 0.0), ylim=c(1, 0.0), axes=F)
par(new=T)
for (i in 1:3) {
plot(Height[Class==i], Weight[Class==i], xlim=c(0, 1), ylim=c(0, 1),
col=color[i], pch=19, xlab='', ylab='', axes=F)
par(new=T)
}
legend(0.8, 0.586,legend=c('Good', 'Fair', 'Poor'), pch=19,
col=color, title='Class')
【问题讨论】:
-
示例
df中的Group和Class列不一致。哪一个是正确的?另外,plot函数是否应该使用Weight而不是Length? -
重量在 x 轴上,长度在散点图上的 y 轴上。绘图函数有重量而不是长度是什么意思?示例 df 中的组和类列不一致?在上面的代码中,我在“类”列中绘制了值。如果这样更容易,我可以输入一个大小列和一个单独的透明度列吗?
-
从您的问题来看,听起来每行的
Class应该唯一确定其Group(1->Opaque small等)。但是示例中的第 1 行和第 3 行具有相同的Class但不同的Groups,第 2 和第 3 行具有相同的Group但不同的Classes。此外,对plot的最后一次调用将Length[class==i]作为其第二个参数,但df中没有Length列。 -
抱歉,我已经编辑了长度到重量。类和组不相关 类是一种生物条件。组基于特定站点的重复次数。如果我绘制所有 900 个点(其中一些是重复的),则数据点可能会重叠并掩盖下面的点。为了解决这个问题,我想绘制一个不透明的小点,它代表 1 个代表,半透明的中等大小的点代表 2-4 个代表,透明的大点代表 > 5。我已经对列下显示的那些重复分组进行了分类团体。任何想法如何解决这个问题?谢谢。
标签: r size 2d transparency scatter-plot