簡體   English   中英

R圖例問題,點的符號被線遮蓋

[英]R legend issue, symbols of points are masked by lines

有沒有一種方法可以畫線,使它們從點的一側開始,或者使符號位於前景中?

我的解決方案是使符號更大,更可見。

編輯1:用於R程序的圖{graphics}。

編輯2:每個熱門請求的代碼。

legend(2,.4,bty='n', c('sugar','citrus','none'), pch=c('s','c','u'), pt.bg='white',lty= c(1,2,3), lwd=1.5, title="Condition",pt.cex=c(1.5),cex=1.5)

編輯3:這是為plot(type ='b')解決的,但對於圖例來說不然。

謝謝閱讀!

我唯一能想到的是手動設置虛線長度,直到它們最終看起來像您想要的樣子。 例如,這:

> plot(1,1)
> legend(c("A", "B"), col = 1:2, x = 1, y = .8, lty="99", pch=1:2)

產生下面的圖像。

lty參數允許您將線條和破折號的長度指定為十六進制字符。 在這種情況下,它說創建線路長度的9然后創建長度的空間9然后重復。 看起來9與正常pch符號周圍的空間最合適。

請注意,您可能需要根據圖像,符號等的大小進行調整。我的建議最終是從R導出圖像並修飾圖像以滿足圖形編輯軟件中的需求。

帶有手動破折號長度的圖形

您還可以使用R提供的填充點(pch = 21:25),並使用pc.bg指定填充顏色,該顏色會在創建圖例時傳遞給points調用。

plot(1,1)
legend(c("A", "B"), col = 1:2, x = 1, y = .8, lty=1, pt.bg=1:2, pch=21:22)

生成以下內容:

填充點圖

遵循@JeffAllen的建議,這是一種獲取我認為您可能想要的方法。 它需要修改legend()函數以返回點的位置(它們由body(legend)[[46]]x1y1給出)。

legend2 <- legend
body(legend2)[[49]] <- quote(
  invisible(list(rect = list(w = w, h = h, left = left, top = top),
  text = list(x = xt, y = yt), points = list(x = x1, y = y1)))
)

作圖:

plot(-100:100, -100:100, type = "b")

繪制圖例時,在線條上繪制白色圓圈( pch = 21pt.bg = 'white' ),然后將legend2()隱式返回的值分配給對象。 還要注意對pt.lwdpt.cex的更改。

myLegend <- legend2(1, .8, bty = 'n', c('sugar','citrus','none'), pch = 21,
  pt.bg = 'white', pt.lwd = 0, lty = c(1, 2, 3), lwd = 1.5, title = "Condition",
  pt.cex = c(1.8), cex = 1.5)

最后,使用points()繪制要在圖例中使用的字符,並從對象myLegend提供x和y值。

points(myLegend$points$x, myLegend$points$y, pch = c('s','c','u'), cex = 1.5)

這應該為您提供以下信息:

樣例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM