R或python中的双色散点图

2024-09-29 21:25:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个由三列和n行组成的数据集。列1包含name、column 2 value1和column 3 value2(rank2)。在

我想绘制一个显示离群值的散点图。在

我在中使用的R命令是:

tiff('scatterplot.tiff')
data<-read.table("scatterplot_data", header=T)
attach(data)
reg1<-lm(A~B)
plot(A,B,col="red")
abline(reg1)
outliers<-data[which(2^(data[,2]-data[,3]) >= 4 | 2^(data[,2]-data[,3]) <=0.25),]

text(outliers[,2], outliers[,3],labels=outliers[,1],cex=0.50)

dev.off()

我得到了这样一个数字:enter image description here

我要的是下半部分的标签应该是一种颜色,上半部分的标签应该是另一种颜色,分别是绿色和红色。在

对命令有什么建议或调整吗?在


Tags: 数据name命令data颜色绘制column标签
2条回答

使用python,matplotlib(pylab)绘制,使用scipynumpy来拟合数据。numpy的诀窍是创建一个索引或掩码来过滤出您想要的结果。在

编辑:要选择性地为顶部和底部的异常值着色?这是我们创建的两个面具的简单组合:

import scipy as sci
import numpy as np
import pylab as plt

# Create some data
N = 1000
X = np.random.normal(5,1,size=N)
Y = X + np.random.normal(0,5.5,size=N)/np.random.normal(5,.1)
NAMES = ["foo"]*1000 # Customize names here

# Fit a polynomial
(a,b)=sci.polyfit(X,Y,1)

# Find all points above the line
idx = (X*a + b) < Y

# Scatter according to that index
plt.scatter(X[idx],Y[idx], color='r')
plt.scatter(X[~idx],Y[~idx], color='g')

# Find top 10 outliers
err = ((X*a+b) - Y) ** 2
idx_L = np.argsort(err)[-10:]
for i in idx_L:
    plt.text(X[i], Y[i], NAMES[i])

# Color the outliers purple or black
top = idx_L[idx[idx_L]]
bot = idx_L[~idx[idx_L]]

plt.scatter(X[top],Y[top], color='purple')
plt.scatter(X[bot],Y[bot], color='black')

XF = np.linspace(0,10,1000)
plt.plot(XF, XF*a + b, 'k ') 
plt.axis('tight')
plt.show()

enter image description here

你已经有了一个让你满意的逻辑测试。只需在颜色规格中使用它来文本:

     text(outliers[,2], outliers[,3],labels=outliers[,1],cex=0.50, 
         col=c("blue", "green")[ 
                which(2^(data[,2]-data[,3]) >= 4 ,  2^(data[,2]-data[,3]) <=0.25)] )

当然,它没有经过测试,因为您没有提供测试用例,但是我的推理是which()函数应该返回1表示差异值gt;=4,返回2表示一个<;=0.25,返回整数(0),这样可以使颜色选择与“离群值”向量正确对齐。在

相关问题 更多 >

    热门问题