मुझे लगता है कि यह एक काफी सामान्य समस्या है, लेकिन मैं यह नहीं समझ सकता कि मेरे ध्रुवीय बारप्लॉट को कैसे समायोजित किया जाए ताकि बार शून्य पर केंद्रित हों और मेरी बाकी मैन्युअल रूप से खींची गई कुल्हाड़ियों को भी ठीक से खींचा जाए।

मैंने इस फ़ंक्शन को जिस तरह से मैं चाहता हूं उसे प्लॉट करने के लिए बनाया है।

polar_chart_theme <- function(data, start = 0){
  
  #max_rate <- data %>% pull(rate) %>% max
  ggplot(data=data)+
  coord_polar(start = start)+
  theme(panel.background = element_rect(fill="white"),
        axis.text.y = element_blank(),
         axis.ticks.y = element_blank(),
        panel.grid = element_blank())+
  annotate("rect", xmin=12, xmax=24, ymin=-Inf, ymax=Inf, fill="gray70")+
  # annotate+
  geom_hline(yintercept = seq(0, 30, by = 10), colour = "grey50", size = 0.2) +
  geom_vline(xintercept = seq(0, 23, by = 6), colour = "grey50", size = 0.2) +
  scale_x_continuous(breaks=seq(0, 23, 6), expand = c(0, 0))+
  # add the y labels
  geom_text(
    data = data.frame(x=2, y=seq(10, 30, 10)),
    aes(
    x = x, 
    y = y,
    label = as.character(y)))

}

यह मूल रूप से मचान बनाता है जहां चीजें बाद में जाएंगी।

polar_chart_theme(toy)

enter image description here

अगर मैं इसे एक लाइन के साथ प्लॉट करता हूं, तो मुझे वांछित आउटपुट मिलता है

toy %>% 
  polar_chart_theme(.) +
  facet_wrap(~date)+
  stat_summary(geom = "polygon",
               fun = mean,
               aes(x=hour_of_day, y=rate,
                   group=Treatment, color=Treatment, fill=Treatment), alpha=0.5) +
  labs(title = "Chronogram",
       y="",
       x="") +
  scale_color_manual(values=c("orange", "black"))+
  scale_fill_manual(values=c("orange", "black"))

enter image description here

अगर मैं बारप्लॉट प्राप्त करने का प्रयास करता हूं, क्योंकि सलाखों की कुछ चौड़ाई होती है, चीजें अजीब हो जाती हैं:

toy %>%
polar_chart_theme(.) +
  facet_wrap(~date)+
stat_summary(geom = "bar",
             position = "stack",
             fun = mean,
             aes(x=hour_of_day, y=rate,
                 group=Treatment, color=Treatment, fill=Treatment), alpha=0.5) +
  labs(title = "Chronogram",
       y="",
       x="") +
  scale_color_manual(values=c("orange", "black"))+
  scale_fill_manual(values=c("orange", "black"))

enter image description here

प्लॉट को ठीक से प्लॉट करने के लिए मैं कैसे अनुमान/समायोजन कर सकता हूं? हो सकता है कि polar_chart_theme पर start तर्क का उपयोग कर रहे हों। मेरे अंतिम आउटपुट में शायद दो पहलू होंगे लेकिन position="stack" का उपयोग करना position="dodge" के कारण पैमाने की समस्याओं से बचने के लिए सुविधाजनक था।

इसे और स्पष्ट करने के लिए:

  1. 0 और 24 अब प्लॉट में एक ही स्थान पर नहीं हैं
  2. न तो 0 या 24 को 12 . से संरेखित किया गया है
  3. 6 और 18 अब संरेखित नहीं हैं

ऐसा लगता है कि बार टिक मार्क के केंद्र में स्थित हैं, लेकिन, क्योंकि प्रत्येक बार में एक width है, कुछ समायोजन/संरेखण समस्या है।

enter image description here

डेटा नमूना

structure(list(Treatment = c("B", "B", "B", "B", "B", "B", "B", 
"B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", 
"B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", 
"B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", 
"B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", 
"B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", 
"B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", 
"B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "A", "A", 
"A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", 
"A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", 
"A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", 
"A", "A", "A", "A", "A", "A", "A"), ID = c(1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), rate = c(9, 13, 8, 6, 6, 
11, 3, 12, 0, 9, 2, 0, 0, 4, 0, 0, 5, 1, 0, 0, 7, 8, 12, 17, 
14, 22, 27, 12, 19, 13, 7, 0, 8, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 
0, 0, 24, 19, 35, 3, 4, 0, 0, 0, 18, 2, 14, 2, 12, 3, 0, 0, 0, 
2, 2, 0, 0, 0, 0, 6, 2, 11, 14, 23, 12, 13, 11, 16, 9, 11, 5, 
12, 5, 3, 0, 0, 0, 0, 3, 4, 0, 4, 7, 0, 7, 15, 17, 3, 20, 14, 
14, 17, 16, 17, 7, 6, 15, 8, 7, 4, 9, 6, 6, 0, 8, 0, 0, 5, 2, 
11, 14, 23, 16, 5, 13, 15, 8, 13, 12, 1, 3, 7, 0, 0, 2, 0, 3, 
6, 0, 5, 4, 6, 8, 17, 21), date = structure(c(18606, 18606, 18606, 
18606, 18606, 18606, 18606, 18606, 18606, 18606, 18606, 18606, 
18606, 18606, 18606, 18606, 18606, 18606, 18606, 18606, 18606, 
18606, 18606, 18606, 18606, 18606, 18606, 18606, 18606, 18606, 
18606, 18606, 18606, 18606, 18606, 18606, 18606, 18606, 18606, 
18606, 18606, 18606, 18606, 18606, 18606, 18606, 18606, 18606, 
18606, 18606, 18606, 18606, 18606, 18606, 18606, 18606, 18606, 
18606, 18606, 18606, 18606, 18606, 18606, 18606, 18606, 18606, 
18606, 18606, 18606, 18606, 18606, 18606, 18606, 18606, 18606, 
18606, 18606, 18606, 18606, 18606, 18606, 18606, 18606, 18606, 
18606, 18606, 18606, 18606, 18606, 18606, 18606, 18606, 18606, 
18606, 18606, 18606, 18606, 18606, 18606, 18606, 18606, 18606, 
18606, 18606, 18606, 18606, 18606, 18606, 18606, 18606, 18606, 
18606, 18606, 18606, 18606, 18606, 18606, 18606, 18606, 18606, 
18606, 18606, 18606, 18606, 18606, 18606, 18606, 18606, 18606, 
18606, 18606, 18606, 18606, 18606, 18606, 18606, 18606, 18606, 
18606, 18606, 18606, 18606, 18606, 18606), class = "Date"), zt = structure(c(1607529600, 
1607533200, 1607536800, 1607540400, 1607544000, 1607547600, 1607551200, 
1607554800, 1607558400, 1607562000, 1607565600, 1607569200, 1607572800, 
1607576400, 1607580000, 1607583600, 1607587200, 1607590800, 1607594400, 
1607598000, 1607601600, 1607605200, 1607608800, 1607612400, 1607529600, 
1607533200, 1607536800, 1607540400, 1607544000, 1607547600, 1607551200, 
1607554800, 1607558400, 1607562000, 1607565600, 1607569200, 1607572800, 
1607576400, 1607580000, 1607583600, 1607587200, 1607590800, 1607594400, 
1607598000, 1607601600, 1607605200, 1607608800, 1607612400, 1607529600, 
1607533200, 1607536800, 1607540400, 1607544000, 1607547600, 1607551200, 
1607554800, 1607558400, 1607562000, 1607565600, 1607569200, 1607572800, 
1607576400, 1607580000, 1607583600, 1607587200, 1607590800, 1607594400, 
1607598000, 1607601600, 1607605200, 1607608800, 1607612400, 1607529600, 
1607533200, 1607536800, 1607540400, 1607544000, 1607547600, 1607551200, 
1607554800, 1607558400, 1607562000, 1607565600, 1607569200, 1607572800, 
1607576400, 1607580000, 1607583600, 1607587200, 1607590800, 1607594400, 
1607598000, 1607601600, 1607605200, 1607608800, 1607612400, 1607529600, 
1607533200, 1607536800, 1607540400, 1607544000, 1607547600, 1607551200, 
1607554800, 1607558400, 1607562000, 1607565600, 1607569200, 1607572800, 
1607576400, 1607580000, 1607583600, 1607587200, 1607590800, 1607594400, 
1607598000, 1607601600, 1607605200, 1607608800, 1607612400, 1607529600, 
1607533200, 1607536800, 1607540400, 1607544000, 1607547600, 1607551200, 
1607554800, 1607558400, 1607562000, 1607565600, 1607569200, 1607572800, 
1607576400, 1607580000, 1607583600, 1607587200, 1607590800, 1607594400, 
1607598000, 1607601600, 1607605200, 1607608800, 1607612400), tzone = "UTC", class = c("POSIXct", 
"POSIXt")), hour_of_day = c(16, 17, 18, 19, 20, 21, 22, 23, 0, 
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 
19, 20, 21, 22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 
13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0, 1, 2, 3, 4, 5, 
6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 
23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 
17, 18, 19, 20, 21, 22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 
11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0, 1, 2, 
3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)), row.names = c(NA, 
-144L), groups = structure(list(Treatment = c("A", "B"), ID = c(1, 
1), .rows = structure(list(97:144, 1:96), ptype = integer(0), class = c("vctrs_list_of", 
"vctrs_vctr", "list"))), row.names = c(NA, -2L), class = c("tbl_df", 
"tbl", "data.frame"), .drop = TRUE), class = c("grouped_df", 
"tbl_df", "tbl", "data.frame"))
0
Matias Andina 4 जिंदा 2021, 23:19
आपका बार प्लॉट संस्करण मेरे लिए ठीक लग रहा है - क्या आप इस बारे में अधिक विशिष्ट हो सकते हैं कि आपका क्या मतलब है "चीजें अजीब हो जाती हैं" और "मैं प्लॉट को ठीक से प्लॉट करने के लिए कैसे अनुमान लगा सकता / समायोजित कर सकता हूं" ? मुझे सच में यकीन नहीं है कि आप जो प्लॉट देखते हैं उसके बारे में आपको क्या पसंद नहीं है।
 – 
Gregor Thomas
4 जिंदा 2021, 23:23
1
अजीब जैसा कि 1 में है) छायांकन अब शून्य पर नहीं जाता, 2) शून्य अब 12 के साथ संरेखित नहीं है और 6 अब 18 के साथ संरेखित नहीं है
 – 
Matias Andina
4 जिंदा 2021, 23:31

1 उत्तर

सबसे बढ़िया उत्तर

मुझे अक्सर गैर-ध्रुवीय कॉर्ड में ध्रुवीय समस्याओं को डीबग करना आसान लगता है। coord_polar को coord_cartesian के साथ ओवरराइड करने पर, हम बार द्वारा पेश किए गए ऑफ़सेट को देख सकते हैं क्योंकि बार केंद्रित हैं:

toy %>% polar_chart_theme(.) +
  ## ...
  coord_cartesian()

enter image description here

हम डेटा को बार चौड़ाई के आधे से ऑफसेट करके इसे संबोधित कर सकते हैं (x निर्देशांक पर + 0.5 देखें)

toy %>%
  polar_chart_theme(.) +
  facet_wrap( ~ date) +
  stat_summary(
    geom = "bar",
    position = "stack",
    fun = mean,
    aes(
      x = hour_of_day + 0.5,
      y = rate,
      group = Treatment,
      color = Treatment,
      fill = Treatment
    ),
    alpha = 0.5
  ) +
  labs(title = "Chronogram",
       y = "",
       x = "") +
  scale_color_manual(values = c("orange", "black")) +
  scale_fill_manual(values = c("orange", "black")) + 
  coord_cartesian()

enter image description here

अब जबकि बार 0 के साथ संरेखित हो गए हैं, हम ध्रुवीय निर्देशांक पर वापस जा सकते हैं:

toy %>%
  polar_chart_theme(.) +
  facet_wrap( ~ date) +
  stat_summary(
    geom = "bar",
    position = "stack",
    fun = mean,
    aes(
      x = hour_of_day + 0.5,
      y = rate,
      group = Treatment,
      color = Treatment,
      fill = Treatment
    ),
    alpha = 0.5
  ) +
  labs(title = "Chronogram",
       y = "",
       x = "") +
  scale_color_manual(values = c("orange", "black")) +
  scale_fill_manual(values = c("orange", "black"))

enter image description here

5
Gregor Thomas 5 जिंदा 2021, 00:36
उत्तम! मुझे लगता है कि 0.5 डिफ़ॉल्ट width = 1 के आधे हिस्से से आता है, है ना?
 – 
Matias Andina
4 जिंदा 2021, 23:56
हां - हालांकि डिफ़ॉल्ट डेटा पर रिज़ॉल्यूशन पर निर्भर करता है, जो इस मामले में 1 है।
 – 
Gregor Thomas
4 जिंदा 2021, 23:57