मेरे पास यह कोड है जो नीचे की साजिश बनाता है

sec_axis_data <- mpg %>%
  group_by(manufacturer) %>%
  summarise(entries = n())

p <- ggplot(mpg, aes(x = manufacturer, fill = class == "compact")) +
  geom_bar(position = "fill") +
  scale_fill_manual(values = c('blue', 'red')) +
  scale_y_continuous(sec.axis = sec_axis(~. * 50))
p

enter image description here

हालांकि, मुझे यकीन नहीं है कि माध्यमिक अक्ष डेटा को साजिश में एक पंक्ति के रूप में ठीक से प्रदर्शित करने के लिए कैसे प्राप्त किया जाए? जब, उदाहरण के लिए, मैं कोशिश करता हूं:

p <- ggplot(mpg, aes(x = manufacturer, fill = class == "compact")) +
  geom_bar(position = "fill") +
  scale_fill_manual(values = c('blue', 'red')) +
  scale_y_continuous(sec.axis = sec_axis(~. * 50)) +
  geom_line(data = sec_axis_data, aes(x = manufacturer, y = entries))
p

... मुझे एक त्रुटि मिलती है। मुझे लगता है कि समस्या mpg और sec_axis_data के लिए डेटा की अलग-अलग लंबाई से जुड़ी हुई है, लेकिन मुझे यकीन नहीं है कि इसे कैसे हल किया जाए।

1
Cleland 16 अप्रैल 2020, 08:08

1 उत्तर

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

आप समाधान के काफी करीब थे।

आपके दूसरे डेटाफ़्रेम में fill तर्क नहीं मिलने के कारण आपको inherit.aes = FALSE जोड़ने की आवश्यकता है।

साथ ही, उपयुक्त मान सेट करने के लिए, आपको अपने "प्रविष्टियों" मानों को उसी अनुपात से विभाजित करने की आवश्यकता है जिसका उपयोग आपने sec.axis फ़ंक्शन में दूसरी धुरी के निर्माण के लिए किया था:

library(ggplot2)

ggplot(mpg, aes(x = manufacturer, fill = class == "compact")) +
  geom_bar(position = "fill", alpha = 0.5) +
  scale_fill_manual(values = c('blue', 'red')) +
  scale_y_continuous(sec.axis = sec_axis(~. * 50, name = "Second axis")) +
  geom_line(inherit.aes = FALSE, data = sec_axis_data, 
            aes(x = manufacturer, y = entries/50, group = 1), size = 2)

enter image description here

क्या यह आपके प्रश्न का उत्तर देता है?

1
dc37 16 अप्रैल 2020, 05:14