Bu ggplot2 grafiği çoğaltılamıyor
ggroughKütüphaneden bir örneği kopyalayamıyorum (https://xvrdm.github.io/ggrough/articles/Customize%20chart.html). Özellikle, aşağıdaki çizimi kopyalamaya çalışıyorum (yazı tipi yönleri hariç):
Kod, yukarıdaki "Anaokulu" başlığı altındaki aynı bağlantıdan alınır.
Aşağıdaki kodu kullanıyorum:
library(hrbrthemes)
library(tidyverse)
library(gcookbook)
library(ggplot2)
library(ggrough)
ggplot(uspopage, aes(x=Year, y=Thousands, fill=AgeGroup)) +
geom_area(alpha=0.8) +
scale_fill_ipsum() +
scale_x_continuous(expand=c(0,0)) +
scale_y_comma() -> p
options <- list(GeomArea=list(fill_style="hachure",
angle_noise=0.5,
gap_noise=0.2,
gap=1.5,
fill_weight=1))
get_rough_chart(p, options)
Ancak, yukarıdakileri kopyalayamıyorum. İşte aldığım şey:
Yine, yazı tipleri konusunda endişelenmiyorum, ancak gölgeli geom_area'nın çalışmasını sağlamak istiyorum. Şu anda hiç işlenmiyor. Referans olarak, pnesnenin verdiği sonuç (yani, ggroughişlemden geçmeden önceki arsa ):
Ayrıca, kullanılan "Blueprint" örneğini kopyalayabileceğime de dikkat edin geom_col. Öyleyse, ggroughişlenirken bir şeyler ters gidiyor gibi görünüyor geom_area, ancak emin değil.
Yanıtlar
Ggrough paketi geom_areaxml düğümlerinde "polyline" adını taşıyan hedef alanı aradığından, ggplot2'nin şu anki sürümüyle iyi çalışmıyor . Ggplot2'nin eski sürümlerinde, bu muhtemelen iyi çalıştı, çünkü her alan bir sürekli çizgi ile çevrelenmişti. Ancak daha yeni sürümlerde artık durum böyle değildir (bkz . 3.3.0'daki değişiklikleri bozma ).
Aşağıdakilerin işinize yarayıp yaramadığını görün:
parse_*İşlevin "çoklu çizgi" yerine "çokgen" arayan bir sürümünü tanımlayın .
parse_polygons <- function (svg) {
shape <- "polygon" # was "polyline" in ggrough:::parse_areas
keys <- NULL
ggrough:::parse_shape(svg, shape, keys) %>% {
purrr::map(.,
~purrr::list_modify(.x,
points = stringr::str_squish(.x$points) %>%
{stringr::str_glue("M{.}Z")},
shape = "path"))
}
}
parse_polygonsGeomArea katmanları için yeni tanımlananları kullanmak için ggrough'daki ilgili dışa aktarılmamış işlevi değiştirin .
Buna ek olarak, ben (orijinalinden eksik gibi göründü ama gerçekten GeomArea daha genel bir durumdur) & arta GeomViolin taşındı GeomRibbon eklediğiniz parse_areasiçin parse_polygonsaynı sorunu ile karşı karşıya, çünkü.
(Not: GeomSmooth da muhtemelen kırılacak, ancak ayrıştırma işlevinin GeomRibbon / GeomViolin'e kıyasla biraz daha ince ayar gerektireceğini düşünüyorum ve bunun için bir kullanım durumu görmüyorum ...)
trace(ggrough:::parse_rough, edit = TRUE)
# paste the following function into the pop-up window
function (svg, geom) {
rough_els <- list()
if (geom %in% c("GeomCol", "GeomBar", "GeomTile", "Background")) {
rough_els <- append(rough_els, parse_rects(svg))
}
if (geom %in% c("GeomSmooth", "Background")) { # removed GeomArea / GeomViolin from here
rough_els <- append(rough_els, parse_areas(svg))
}
if (geom %in% c("GeomArea", "GeomRibbon", "GeomViolin")) { # new condition here
rough_els <- append(rough_els, parse_polygons(svg))
}
if (geom %in% c("GeomPoint", "GeomJitter", "GeomDotPlot", "Background")) {
rough_els <- append(rough_els, parse_circles(svg))
}
if (geom %in% c("GeomLine", "GeomSmooth", "Background")) {
rough_els <- append(rough_els, parse_lines(svg))
}
if (geom %in% c("Background")) {
rough_els <- append(rough_els, parse_texts(svg))
}
purrr::map(rough_els, ~purrr::list_modify(.x, geom = geom))
}
Ölçek:
library(ggplot2)
library(ggrough)
uspopage <- gcookbook::uspopage
p <- ggplot(uspopage, aes(x=Year, y=Thousands, fill=AgeGroup)) +
geom_area(alpha=0.8) +
scale_x_continuous(expand=c(0,0)); p
options <- list(GeomArea=list(fill_style="hachure",
angle_noise=0.5,
gap_noise=0.2,
gap=1.5,
fill_weight=1))
get_rough_chart(p, options)
Ek test geom_ribbon:
# using example from geom_ribbon help page
pp <- data.frame(year = 1875:1972, level = as.vector(LakeHuron)) %>%
ggplot(aes(year)) +
geom_ribbon(aes(ymin = level - 1, ymax = level + 1),
fill = "grey70")
options <- list(GeomRibbon=list(fill_style="hachure",
angle_noise=0.5,
gap_noise=0.2,
gap=1.5,
fill_weight=1))
get_rough_chart(pp, options)
Oturum bilgileri:
R version 4.0.1 (2020-06-06)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 15063)
Matrix products: default
locale:
[1] LC_COLLATE=English_Singapore.1252 LC_CTYPE=English_Singapore.1252
[3] LC_MONETARY=English_Singapore.1252 LC_NUMERIC=C
[5] LC_TIME=English_Singapore.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] gdtools_0.2.2 dplyr_1.0.0 ggrough_0.1.0 ggplot2_3.3.2
loaded via a namespace (and not attached):
[1] Rcpp_1.0.5 cpp11_0.2.1 pillar_1.4.6 compiler_4.0.1
[5] plyr_1.8.6 Rmisc_1.5 forcats_0.5.0 tools_4.0.1
[9] boot_1.3-25 digest_0.6.25 jsonlite_1.7.1 lifecycle_0.2.0
[13] tibble_3.0.3 gtable_0.3.0 lattice_0.20-41 pkgconfig_2.0.3
[17] rlang_0.4.7 rstudioapi_0.11 yaml_2.2.1 xml2_1.3.2
[21] withr_2.2.0 stringr_1.4.0 htmlwidgets_1.5.1 systemfonts_0.3.1
[25] generics_0.0.2 vctrs_0.3.4 grid_4.0.1 tidyselect_1.1.0
[29] data.table_1.12.8 svglite_1.2.3.2 glue_1.4.2 R6_2.4.1
[33] gcookbook_2.0 tidyr_1.1.0 reshape2_1.4.4 purrr_0.3.4
[37] farver_2.0.3 magrittr_1.5 htmltools_0.5.0 scales_1.1.1
[41] ellipsis_0.3.1 fortunes_1.5-4 colorspace_1.4-1 labeling_0.3
[45] stringi_1.5.3 munsell_0.5.0 crayon_1.3.4
Bunu bir cevap olarak yazıyorum çünkü yorumlar için çok uzun olurdu.
ggrough Paketi de sizin için denedim :
Github benioku dosyasındaki aşağıdaki örnek mükemmel çalışıyor:
library(ggplot2)
count(mtcars, carb) %>%
ggplot(aes(carb, n)) +
geom_col() +
labs(title="Number of cars by carburator count") +
theme_grey(base_size = 16) -> p
p
library(ggrough)
options <- list(
Background=list(roughness=8),
GeomCol=list(fill_style="zigzag", angle_noise=0.5, fill_weight=2))
get_rough_chart(p, options)
Yine de, örneğinizi denediğimde:
library(hrbrthemes)
library(tidyverse)
library(gcookbook)
library(ggplot2)
library(ggrough)
ggplot(uspopage, aes(x=Year, y=Thousands, fill=AgeGroup)) +
geom_area(alpha=0.8) +
scale_fill_ipsum() +
scale_x_continuous(expand=c(0,0)) +
scale_y_comma() -> p
p
Buraya kadar sorun yok, bu şu görüntüyü verecektir:
Şimdi ggrough kısmını eklememiz gerekecek.
options <- list(GeomArea=list(fill_style="hachure",
angle_noise=0.5,
gap_noise=0.2,
gap=1.5,
fill_weight=1))
get_rough_chart(p, options)
Seninle hemen hemen aynı sonucu alıyorum:
Seninle aynı sonuca vardım:
Öyleyse ggrough geom_area'yı işlerken bir şeyler ters gidiyor gibi görünüyor
Ggrough parçası için tüm aynı ayarları başarılı bir şekilde (tek farkla birlikte GeomCol) yukarıdaki araba sayısı örneği için bile kullanabilir .
Github sayfasının dediği gibi:
ggrough devam eden bir çalışmadır ve hala büyük hataları vardır. Katkılara açığız! "
Son Git taahhüdünü 2 yıl önce yaptılar.
Şimdi, yaratmak istediğiniz olay örgüsü kendi örneklerinden olduğu için, bir zamanlar işe yaradığından oldukça eminim. (Neden sahte arsalar yüklesinler demek istiyorum)
Yani gerçekten çaresizseniz, deneyebilirsiniz:
2 yıl öncesinden bir ggplot2 sürümü (ve diğer gerekli paketleri) yükleyin
ggroughPaketten daha eski bir commit sürümünü yükleyin . Belki bir zamanlar geçerli olan örneği bozan bir taahhütte bulundular.
Veya paketlerini onarmaya çalışırsınız;)