3

3つの列とn個の行のデータセットがあります。列1には名前、列2の値1、列3の値2(ランク2)が含まれます。

名前を表示する外れ値を使用して散布図をプロットしたいと思います。

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()

そして私はこのような図を取得します:ここに画像の説明を入力してください

私が欲しいのは、下半分のラベルは1つの色で、上半分のラベルはそれぞれ緑と赤の別の色である必要があります。

コマンドの提案や調整はありますか?

4

2 に答える 2

5

あなたはすでに満足のいくように機能する論理テストを持っています。テキストのカラースペックで使用するだけです:

     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()関数は差>= 4の場合は1、<= 0.25の場合は2、その他すべての場合はinteger(0)を返す必要があるためです。 「外れ値」ベクトルとの色の選択の適切な配置を提供します。

于 2012-05-16T13:49:52.857 に答える
4

python、matplotlib(pylab)を使用してプロットし、、scipyを使用numpyしてデータを適合させます。の秘訣は、必要な結果を除外する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()

ここに画像の説明を入力してください

于 2012-05-16T14:18:19.223 に答える