2

への型引数はxyplot()、「ステップ」を表す「s」を取ることができます。からhelp(plot):

2 つのステップ タイプは、xy 設定が異なります。x1 < x2 で (x1,y1) から (x2,y2) に移動する場合、'type = "s"' は最初に水平に移動し、次に垂直に移動しますが、'type = "S"' です。逆に動きます。

つまり、 を使用するtype="s"と、ステップの水平部分の左端がデータ ポイントにtype="S"接続され、右端がデータ ポイントに接続されます。

library(lattice)
set.seed(12345)
num.points <- 10
my.df <- data.frame(x=sort(sample(1:100, num.points)),
                    y=sample(1:40, num.points, replace=TRUE))

xyplot(y~x, data=my.df, type=c("p","s"), col="blue", main='type="s"')
xyplot(y~x, data=my.df, type=c("p","S"), col="red", main='type="S"')

type='s'

タイプ='S'

x1 + (x2-x1)/2ステップの水平部分がデータポイントの中心になるように、データポイントポイント間、つまり で垂直方向の動きが発生する「ステップ」プロットをどのように実現できますか?

いくつかのサンプル コードを含めるように編集されました。私が思うに、決して遅いよりはましです。

4

2 に答える 2

2

私はの専門家ではないので、これは基本的なグラフィックソリューションですlattice

segments基本的に、最初に水平方向、次に垂直方向のステップを描画し、シフトされた座標をベクトルとして渡すために使用できます。

次に例を示します。

set.seed(12345)

# Generate some data
num.points <- 10
x <- sort(sample(1:100, num.points))
y <- sample(1:40, num.points, replace=T)


# Plot the data with style = "s" and "S"
par(mfrow=c(1,3))

plot(x, y, "s", col="red", lwd=2, las=1, 
     main="Style: 's'", xlim=c(0, 100))
points(x, y, pch=19, col="red", cex=0.8)

plot(x, y, "S", col="blue", lwd=2, las=1, 
     main="Style: 'S'", xlim=c(0, 100))
points(x, y, pch=19, col="blue", cex=0.8)

# Now plot our points
plot(x, y, pch=19, col="orange", cex=0.8, las=1, 
     main="Centered steps", xlim=c(0, 100))

# Calculate the starting and ending points of the
# horizontal segments, by shifting the x coordinates
# by half the difference with the next point
# Note we leave the first and last point as starting and
# ending points
x.start <- x - (c(0, diff(x)/2))
x.end <- x + (c(diff(x)/2, 0))

# Now draw the horizontal segments
segments(x.start, y, x.end, y, col="orange", lwd=2)
# and the vertical ones (no need to draw the last one)
segments(x.end[-length(x.end)], y[1:(length(y)-1)], 
         x.end[-length(x.end)], y[-1], col="orange", lwd=2)

結果は次のとおりです。 ステッププロット

于 2013-02-08T20:13:01.530 に答える
2

私は優れた@nicoの回答を使用して、その格子バージョンを提供しています。質問が再現可能な例を提供していないため、@Dwinでも問題ありませんが、ラティスパネルのカスタマイズは難しい場合があります。アイデアは、基本グラフィックスpanel.segmentsに相当するものを使用することです。segments

library(lattice)
xyplot(y~x,
       panel =function(...){
         ll <- list(...)
         x <- ll$x
         y <- ll$y
         x.start <- x - (c(0, diff(x)/2))
         x.end   <- x + (c(diff(x)/2, 0))
         panel.segments(x.start, y, x.end, y, col="orange", lwd=2)
         panel.segments(x.end[-length(x.end)], y[1:(length(y)-1)], 
                        x.end[-length(x.end)], y[-1], col="orange", lwd=2)
         ## this is optional just to compare with type s
         panel.xyplot(...,type='s')
         ## and type S
         panel.xyplot(...,type='S')
       })

ここに画像の説明を入力

于 2013-02-08T21:12:22.980 に答える