জিজিপ্লট 2-এ অক্ষ এবং অঞ্চল-প্লটের মধ্যে স্থান কীভাবে সরাবেন?


113

আমার কাছে নিম্নলিখিত ডেটাফ্রেম রয়েছে:

uniq <- structure(list(year = c(1986L, 1987L, 1991L, 1992L, 1993L, 1994L, 1995L, 1996L, 1997L, 1998L, 1999L, 2000L, 2001L, 2002L, 2003L, 2004L, 2005L, 2006L, 2007L, 2008L, 2009L, 2010L, 2011L, 2012L, 2013L, 2014L, 1986L, 1987L, 1991L, 1992L, 1993L, 1994L, 1995L, 1996L, 1997L, 1998L, 1999L, 2000L, 2001L, 2002L, 2003L, 2004L, 2005L, 2006L, 2007L, 2008L, 2009L, 2010L, 2011L, 2012L, 2013L, 2014L, 1986L, 1987L, 1991L, 1992L, 1993L, 1994L, 1995L, 1996L, 1997L, 1998L, 1999L, 2000L, 2001L, 2002L, 2003L, 2004L, 2005L, 2006L, 2007L, 2008L, 2009L, 2010L, 2011L, 2012L, 2013L, 2014L), uniq.loc = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("u.1", "u.2", "u.3"), class = "factor"), uniq.n = c(1, 1, 1, 2, 5, 4, 2, 16, 16, 10, 15, 14, 8, 12, 20, 11, 17, 30, 17, 21, 22, 19, 34, 44, 56, 11, 0, 0, 3, 3, 7, 17, 12, 21, 18, 10, 12, 9, 7, 11, 25, 14, 11, 17, 12, 24, 59, 17, 36, 50, 59, 12, 0, 0, 0, 1, 4, 6, 3, 3, 9, 3, 4, 2, 5, 2, 12, 6, 8, 8, 3, 2, 9, 5, 20, 7, 10, 8), uniq.p = c(100, 100, 25, 33.3, 31.2, 14.8, 11.8, 40, 37.2, 43.5, 48.4, 56, 40, 48, 35.1, 35.5, 47.2, 54.5, 53.1, 44.7, 24.4, 46.3, 37.8, 43.6, 44.8, 35.5, 0, 0, 75, 50, 43.8, 63, 70.6, 52.5, 41.9, 43.5, 38.7, 36, 35, 44, 43.9, 45.2, 30.6, 30.9, 37.5, 51.1, 65.6, 41.5, 40, 49.5, 47.2, 38.7, 0, 0, 0, 16.7, 25, 22.2, 17.6, 7.5, 20.9, 13, 12.9, 8, 25, 8, 21.1, 19.4, 22.2, 14.5, 9.4, 4.3, 10, 12.2, 22.2, 6.9, 8, 25.8)), .Names = c("year", "uniq.loc", "uniq.n", "uniq.p"), class = "data.frame", row.names = c(NA, -78L))

যখন আমি এর সাথে একটি অঞ্চল-প্লট তৈরি করি:

ggplot(data = uniq) + 
  geom_area(aes(x = year, y = uniq.p, fill = uniq.loc), stat = "identity", position = "stack") +
  scale_x_continuous(limits=c(1986,2014)) +
  scale_y_continuous(limits=c(0,101)) +
  theme_bw()

আমি এই ফলাফল পেতে:

এখানে চিত্র বর্ণনা লিখুন

তবে আমি অক্ষ এবং প্রকৃত চক্রান্তের মধ্যে স্থানটি সরিয়ে দিতে চাই। আমি যুক্ত করার সময় আমি theme(panel.grid = element_blank(), panel.margin = unit(-0.8, "lines"))নিম্নলিখিত ত্রুটি বার্তাটি পাই:

Error in theme(panel.grid = element_blank(), panel.margin = unit(-0.8,  : 
  could not find function "unit"

এই সমস্যাটি কীভাবে সমাধান করবেন সে সম্পর্কে কোনও পরামর্শ?


3
আমার মনে হয় আপনার স্পষ্টভাবে গ্রিড প্যাকেজটি লোড করা দরকারunit
টাইলার রিঙ্কার

টুইটারে আমি আর একটি ত্রুটি বার্তা পাই না। আমি ইতিমধ্যে অন্য উপায়ে সমস্যার সমাধান করেছি, তবে আমি যখন মার্জিন সেট করতে চাই তখন ভবিষ্যতের জন্য এটি একটি দুর্দান্ত অনুস্মারক।
জাপ

3
এটি কখনও কখনও একটি শক্ত লেআউট হিসাবে উল্লেখ করা হয়। এটি এখানে উল্লেখ করা যাতে সার্চ ইঞ্জিনগুলি এটি বাছাই করতে পারে।
বেনামে

উত্তর:


191

আপডেট: সাম্প্রতিকতম সংস্করণগুলিতে আরও সম্ভাবনার জন্য @ ডিবিবিসানের উত্তর দেখুন


থেকে ?scale_x_continuousসম্পর্কে expand-argument:

পরিসীমা সম্প্রসারণ ধ্রুবকগুলির ভেক্টরটি অক্ষের থেকে কিছুটা দূরে স্থাপন করা হয়েছে তা নিশ্চিত করার জন্য ডেটাগুলির চারপাশে কিছু প্যাডিং যুক্ত করত। ডিফল্টগুলি ক্রমাগত ভেরিয়েবলের জন্য প্রতিটি পাশের স্কেলকে 5% এবং প্রসারিত ভেরিয়েবলের জন্য প্রতিটি পাশের 0.6 ইউনিট বিস্তৃত করতে হবে।

সমস্যাটি এভাবে যুক্ত expand = c(0,0)করে scale_x_continuousএবং সমাধান করা হয় scale_y_continuous। এটি panel.marginপ্যারামিটার যুক্ত করার প্রয়োজনীয়তাও সরিয়ে দেয় ।

কোড:

ggplot(data = uniq) + 
  geom_area(aes(x = year, y = uniq.p, fill = uniq.loc), stat = "identity", position = "stack") +
  scale_x_continuous(limits = c(1986,2014), expand = c(0, 0)) +
  scale_y_continuous(limits = c(0,101), expand = c(0, 0)) +
  theme_bw() +
  theme(panel.grid = element_blank(),
        panel.border = element_blank())

ফলাফল: কোন ফাঁক ছাড়াই প্লট অঞ্চল চার্ট


41

হিসাবে ggplot2 version 3, একটি expand_scale()ফাংশন রয়েছে যা আপনি expand=তর্ক করতে পারেন যা আপনাকে স্কেলের প্রতিটি পাশের জন্য বিভিন্ন প্রসারিত মান নির্দিষ্ট করতে দেয়।

হিসাবে ggplot2 version 3.3.0, অন্যথায় অভিন্নভাবে কাজ করে তার expand_scale()পক্ষে অবচয় করা হয়েছে expansion

এটি আপনাকে সম্প্রসারণকে পরম আকার ( add=পরামিতি ব্যবহার করুন ) বা প্লটের আকারের শতকরা শতাংশ ( প্যারামিটারটি ব্যবহার ) করতে চান তা চয়ন করতে দেয় mult=:

ggplot(data = uniq) + 
  geom_area(aes(x = year, y = uniq.p, fill = uniq.loc), stat = "identity", position = "stack") +
  scale_x_continuous(limits = c(1986,2014), expand = c(0, 0)) +
  scale_y_continuous(limits = c(0,101), expand = expansion(mult = c(0, .1))) +
  theme_bw()

এখানে চিত্র বর্ণনা লিখুন


দ্রুত দ্রষ্টব্য: expand_scale()পরিবর্তিত হয়েছে expansion()তবে এক্ষেত্রে অভিন্নভাবে কাজ করে।
মোলেক্স

1
@ মোলেক্স ধন্যবাদ, আমি উত্তর আপডেট করেছি!
ডিবিবিসান

14

অভিন্ন ফলাফল উত্পাদন করার জন্য অন্য বিকল্পটি coord_cartesianক্রমাগত অবস্থানের স্কেলগুলির (x & y) এর পরিবর্তে ব্যবহার করছে :

ggplot(data = uniq) +  
  geom_area(aes(x = year, y = uniq.p, fill = uniq.loc), stat = "identity", position = "stack") +  
  coord_cartesian(xlim = c(1986,2014), ylim = c(0,101))+
  theme_bw() + theme(panel.grid=element_blank(), panel.border=element_blank())

2
ভাল বিকল্প, +1। তবে scales_x/y_continuousব্রেকগুলি ইত্যাদি নির্দিষ্ট করতে চাইলে আপনার এখনও যন্ত্রাংশগুলির প্রয়োজন হবে ।
জাপ

বা, আরও সহজ, এই প্রশ্নে @ মার্কাস মন্তব্যে প্রস্তাবিত হিসাবে সেট করা expand = FALSEহয়েছেcoord_cartesian
Tjebo

@ তেজেবো আউটপুটটি কিছুটা আলাদা তবে বাস্তবে এটি ওপি দ্বারা প্রত্যাশিত ফলাফলের কাছাকাছি। আমি আমার উত্তরে এটি পরে যুক্ত করব। ধন্যবাদ.
এমপালাঙ্কো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.