ggplot2에서 그리드, 배경색 및 상단 및 오른쪽 테두리 제거
저는 ggplot2를 사용하여 바로 아래 플롯을 재현하고 싶습니다.가까이 갈 수는 있지만 위쪽과 오른쪽 테두리는 제거할 수 없습니다.아래에서는 스택 오버플로에서 또는 스택 오버플로를 통해 발견된 여러 제안을 포함하여 ggplot2를 사용하는 몇 가지 시도를 제시합니다.유감스럽게도 저는 그 제안들을 실행에 옮길 수 없었습니다.
누군가 아래 코드 스니펫 중 하나 이상을 수정할 수 있기를 바랍니다.
제안해 주셔서 감사합니다.
# desired plot
a <- seq(1,20)
b <- a^0.25
plot(a,b, bty = "l")
library(ggplot2)
df <- as.data.frame(cbind(a,b))
# 1. ggplot2 default
ggplot(df, aes(x = a, y = b)) + geom_point()
# 2. removes background color
ggplot(df, aes(x = a, y = b)) + geom_point() + opts(panel.background = theme_rect(fill='white', colour='black'))
# 3. also removes gridlines
none <- theme_blank()
ggplot(df, aes(x = a, y = b)) + geom_point() + opts(panel.background = theme_rect(fill='white', colour='black')) + opts(panel.grid.major = none, panel.grid.minor = none)
# 4. does not remove top and right border
ggplot(df, aes(x = a, y = b)) + geom_point() + opts(panel.background = theme_rect(fill='white', colour='black')) + opts(panel.grid.major = none, panel.grid.minor = none) + opts(panel.border = none)
# 5. does not remove top and right border
ggplot(df, aes(x = a, y = b)) + geom_point() + opts(panel.background = theme_rect(fill='white', colour='black')) + opts(panel.grid.major = none, panel.grid.minor = none) + opts(axis.line = theme_segment())
# 6. removes x and y axis in addition to top and right border
# http://stackoverflow.com/questions/5458409/remove-top-and-right-border-from-ggplot2
ggplot(df, aes(x = a, y = b)) + geom_point() + opts(panel.background = theme_rect(fill='white', colour='black')) + opts(panel.grid.major = none, panel.grid.minor = none) + opts(panel.background=theme_rect(colour=NA))
# 7. returns error when attempting to remove top and right border
# https://groups.google.com/group/ggplot2/browse_thread/thread/f998d113638bf251
#
# Error in el(...) : could not find function "polylineGrob"
#
theme_L_border <- function(colour = "black", size = 1, linetype = 1) {
structure(
function(x = 0, y = 0, width = 1, height = 1, ...) {
polylineGrob(
x=c(x+width, x, x), y=c(y,y,y+height), ..., default.units = "npc",
gp=gpar(lwd=size, col=colour, lty=linetype),
)
},
class = "theme",
type = "box",
call = match.call()
)
}
ggplot(df, aes(x = a, y = b)) + geom_point() + opts(panel.background = theme_rect(fill='white', colour='black')) + opts(panel.grid.major = none, panel.grid.minor = none) + opts( panel.border = theme_L_border())
편집 이 대답을 무시합니다.이제 더 나은 답이 있습니다.댓글 보세요.사용하다+ theme_classic()
편집
이것이 더 좋은 버전입니다.원래 게시물에 아래 언급된 버그가 남아 있는 것 같습니다(제 생각).그러나 축선은 패널 아래에 그려집니다.따라서 두 개의 밸브를 모두 탈거하십시오.panel.border
그리고.panel.background
축 선을 확인합니다.
library(ggplot2)
a <- seq(1,20)
b <- a^0.25
df <- data.frame(a,b)
ggplot(df, aes(x = a, y = b)) + geom_point() +
theme_bw() +
theme(axis.line = element_line(colour = "black"),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
panel.background = element_blank())
원래 게시물 이것이 가까워집니다.에 버그가 있었습니다.axis.line
y축에서 작동하지 않음(여기 참조), 아직 고정되지 않은 것으로 나타납니다.따라서 패널 테두리를 제거한 후에는 다음을 사용하여 Y축을 별도로 그려야 합니다.geom_vline
.
library(ggplot2)
library(grid)
a <- seq(1,20)
b <- a^0.25
df <- data.frame(a,b)
p = ggplot(df, aes(x = a, y = b)) + geom_point() +
scale_y_continuous(expand = c(0,0)) +
scale_x_continuous(expand = c(0,0)) +
theme_bw() +
opts(axis.line = theme_segment(colour = "black"),
panel.grid.major = theme_blank(),
panel.grid.minor = theme_blank(),
panel.border = theme_blank()) +
geom_vline(xintercept = 0)
p
끝 지점은 잘라지지만 침례자가 코드를 사용하여 잘라낼 수 있습니다.
gt <- ggplot_gtable(ggplot_build(p))
gt$layout$clip[gt$layout$name=="panel"] <- "off"
grid.draw(gt)
또는 사용limits
패널의 경계를 이동합니다.
ggplot(df, aes(x = a, y = b)) + geom_point() +
xlim(0,22) + ylim(.95, 2.1) +
scale_x_continuous(expand = c(0,0), limits = c(0,22)) +
scale_y_continuous(expand = c(0,0), limits = c(.95, 2.2)) +
theme_bw() +
opts(axis.line = theme_segment(colour = "black"),
panel.grid.major = theme_blank(),
panel.grid.minor = theme_blank(),
panel.border = theme_blank()) +
geom_vline(xintercept = 0)
ggplot(0.9.2+)에 대한 최근 업데이트로 테마에 대한 구문이 개선되었습니다.가장 주목할 만한 것은,opts()
로 대체되어 이제는 더 이상 사용되지 않습니다.theme()
Sandy의 답변은 여전히 (2012년 1월 기준) 차트를 생성하지만 R이 경고를 많이 던지게 합니다.
다음은 현재 ggplot 구문을 반영하는 업데이트된 코드입니다.
library(ggplot2)
a <- seq(1,20)
b <- a^0.25
df <- as.data.frame(cbind(a,b))
#base ggplot object
p <- ggplot(df, aes(x = a, y = b))
p +
#plots the points
geom_point() +
#theme with white background
theme_bw() +
#eliminates background, gridlines, and chart border
theme(
plot.background = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank()
) +
#draws x and y axis line
theme(axis.line = element_line(color = 'black'))
생성:
의 대안theme_classic()
소 그림 패키지와 함께 제공되는 주제입니다.theme_cowplot()
(패키지와 함께 자동으로 로드됨).와 비슷해 보입니다.theme_classic()
약간의 미묘한 차이가 있습니다.가장 중요한 것은 기본 레이블 크기가 더 크기 때문에 결과 수치를 추가 수정 없이 출판물에서 사용할 수 있다는 것입니다(특히 다음을 사용하여 저장하는 경우).save_plot()
대신에ggsave()
또한 배경은 흰색이 아닌 투명하며 일러스트레이터의 그림을 편집할 때 유용할 수 있습니다.마지막으로, 제 생각에는, 측면이 있는 줄거리가 더 좋아 보입니다.
예:
library(cowplot)
a <- seq(1,20)
b <- a^0.25
df <- as.data.frame(cbind(a,b))
p <- ggplot(df, aes(x = a, y = b)) + geom_point()
save_plot('plot.png', p) # alternative to ggsave, with default settings that work well with the theme
이것이 그 파일입니다.plot.png
이 코드로 생성된 것은 다음과 같습니다.
고지 사항:저는 패키지 작성자입니다.
저는 Andrew의 답변을 따랐지만, 제 버전의 ggplot(v2.1.0)의 버그로 인해 https://stackoverflow.com/a/35833548 을 따라 x축과 y축을 따로 설정해야 했습니다.
대신에
theme(axis.line = element_line(color = 'black'))
사용한
theme(axis.line.x = element_line(color="black", size = 2),
axis.line.y = element_line(color="black", size = 2))
은 위의옵다사용작성맵않으로 작성된 .sf
그리고.geom_sf()
된 따라서관추자합니다고하가사항을련을 .ndiscr
매개 변수를 입력합니다.이렇게 하면 형상만 보여주는 깨끗한 지도가 만들어집니다.
library(sf)
library(ggplot2)
ggplot() +
geom_sf(data = some_shp) +
theme_minimal() + # white background
theme(axis.text = element_blank(), # remove geographic coordinates
axis.ticks = element_blank()) + # remove ticks
coord_sf(ndiscr = 0) # remove grid in the background
여기 아주 간단한 대답이 있습니다.
yourPlot +
theme(
panel.border = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
axis.line = element_line(colour = "black")
)
그 정도로 쉽습니다.출처: 이 기사의 끝
위의 Andrew의 답변에서 단순화하면 절반의 경계를 생성하는 핵심 주제가 됩니다.
theme (panel.border = element_blank(),
axis.line = element_line(color='black'))
또한 확인할 수 있습니다.panel.background
뿐만 아니라.
theme(
panel.background = element_rect(fill = "black"),
panel.grid.major = element_blank(), panel.grid.minor = element_blank()
언급URL : https://stackoverflow.com/questions/10861773/remove-grid-background-color-and-top-and-right-borders-from-ggplot2
'source' 카테고리의 다른 글
디버깅을 위해 제너레이터 개체를 목록으로 변환 (0) | 2023.07.16 |
---|---|
C++ 단일 줄 주석 뒤에 다중 줄 주석의 \변환이 나옵니다. (0) | 2023.07.16 |
열거형이 목록에 없는 값을 가질 수 있습니까? (0) | 2023.07.16 |
Python의 Haversine 공식(두 GPS 지점 사이의 방위 및 거리) (0) | 2023.07.16 |
C#을 통해 워크시트 이름별 Excel 워크시트 참조 가져오기 (0) | 2023.07.06 |