Gpplot এ কীভাবে অনুপাত ঠিক করবেন?


88

আমি আমার দস্তাবেজের সাথে মানিয়ে নেওয়ার জন্য একটি প্লটটির আকার পরিবর্তন করার চেষ্টা করছি, তবে প্লটযুক্ত চিত্রটি বর্গক্ষেত্র হতে আমার অসুবিধা হচ্ছে।

উদাহরণ:

pdf(file = "./out.pdf", width = 5, height = 5)
p <- ggplot(mydata, aes(x = col1, y = col2))
print(p)
aux <- dev.off()

যদিও এক্স এবং ওয়াইয়ের সীমা একই, তবে ফলাফলের প্লটটি বর্গক্ষেত্র নয়। আমি অনুমান করি যে আর এনকোলেসিং প্যানেল 5x5 তৈরি করে "তবে প্রকৃত চিত্রের আকারটির কোনও যত্ন নেই।

আমি কীভাবে আমার ডায়াগ্রামগুলি আনস্ক্যাশ করতে পারি ?

উত্তর:


114

ইন ggplotপ্রক্রিয়া আপনার প্লটের অনুপাত সংরক্ষণ করার জন্য একটি যোগ হয় coord_fixed()প্লট করার জন্য স্তর। এটি প্রকৃত সীমানা বাক্সের আকার নির্বিশেষে প্লটের নিজেই অনুপাতটি সংরক্ষণ করবে।

(আমি ggsaveআপনার ফলস্বরূপ প্লটটি pdf(); print(p); dev.off()ক্রমানুসারে পরিবর্তে পিডিএফ / পিএনজি / ইত্যাদি সংরক্ষণ করতে ব্যবহার করার পরামর্শ দিচ্ছি )

library(ggplot2)
df <- data.frame(
    x = runif(100, 0, 5),
    y = runif(100, 0, 5))

ggplot(df, aes(x=x, y=y)) + geom_point() + coord_fixed()

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


4
আপনি কি জানেন যে জিজিপ্লট কেন y অক্ষের লেবেলটি বাম দিকে রাখার জন্য জোর দিয়েছিলেন? আমি জানি যে প্রতিরোধ কিভাবে ভালোবাসতাম ...
চেজ

@ কিনুন একটি ক্লডজি ওয়ার্কারআউন্ড hjustশিরোনামের অবস্থানটি পরিবর্তন করতে হবে - চেষ্টা করুন opts(axis.title.y=theme_text(hjust=10))। তবে, দুঃখের বিষয়, এমনটা মনে হচ্ছে না। একটি ggplot মেলিং তালিকা আলোচনার জন্য এবং @ ব্যাপটিস্টের উত্তরের জন্য গোষ্ঠীগুলি google.com/group/ggplot2/browse_thread/thread/… দেখুন ।
অ্যান্ড্রি

4
সেই আচরণটি উন্নয়নের সংস্করণে স্থির।
হ্যাডলি

4
প্রশ্নের আরও সাধারণ শিরোনামের সাথে, আপনি কীভাবে অনুপাত (কর্ড_ফিক্সডের পক্ষে যুক্তি) গণনা করতে পারেন যা প্রদত্ত উভয় অক্ষরে একই সীমা ব্যবহার করে না সে সম্পর্কেও তথ্য যুক্ত করতে পারেন?
htorque

4
@ হটারকের মন্তব্যে আরও; যদি y এর পরিবর্তে সংজ্ঞায়িত করা হয় y=runif(100, 0, 50)তবে প্লটের দিকটি আর বর্গক্ষেত্র নয়। coord_fixed()প্রতিটি অক্ষের স্কেল কেবল সমান বলে মনে হয়?
একটি ভিন্ন বেন

80

একটি নির্দিষ্ট আকৃতি অনুপাত, যেমন বর্গাকার, ব্যবহারের জন্য নিশ্চিত করার জন্য theme(aspect.ratio=1)

অ্যান্ডির উত্তর পুরো চিত্র দেয় না, যেমন উদাহরণটি সম্ভবত অপ্রাকৃত তথ্য সরবরাহ করে যেখানে এক্সের পরিধি y এর সমান হয়। তবে যদি ডেটা ছিল:

df <- data.frame(
  x = runif(100, 0, 50),
  y = runif(100, 0, 5))
ggplot(df, aes(x=x, y=y)) + geom_point() + coord_fixed()

এরপরে প্লটটি এর মতো দেখতে লাগবে:

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

Coord_fixed () ফাংশনে অক্ষের অনুপাত সামঞ্জস্য করার জন্য একটি যুক্তিও রয়েছে:

ratio অনুপাত অনুপাত, y / x হিসাবে প্রকাশিত

যাতে প্লটটি দিয়ে বর্গাকার করা যায়:

ggplot(df, aes(x=x, y=y)) + geom_point() + coord_fixed(ratio=10)

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

তবে আপনাকে এটিকে ভেরিয়েবল বা প্লটের ক্ষেত্রের সীমাতে সমন্বিত করতে হবে (সমস্ত সীমা এই উদাহরণগুলির মতো পুরো সংখ্যা দ্বারা সুন্দরভাবে বিভাজ্য নয়)।


13

সম্পূর্ণতার জন্য: আপনি যদি খুব আলাদা অক্ষের সীমা বিবেচনা করতে চান:

df <- data.frame(
  x = runif(100, 0, 5000),
  y = runif(100, 0, 5))
ratio.display <- 4/3
ratio.values <- (max(df$x)-min(df$x))/(max(df$y)-min(df$y))
plot <- ggplot(df, aes(x=x, y=y)) + geom_point()
plot + coord_fixed(ratio.values / ratio.display)

এর ফলাফল:


14
এর চেয়ে ভাল কি করে plot + theme(aspect.ratio=4/3)? Gpplot একাধিক স্তর সেট সহ একাধিক স্তর থাকতে পারে এবং অক্ষগুলির মধ্যে নির্বিচারে প্রসারণের কারণ থাকতে পারে, সুতরাং একটি ডেটা উত্স থেকে y / x এর অনুপাত গণনা করা বেশ ভঙ্গুর বলে মনে হয়।
baptiste

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